gpt4 book ai didi

c# - 如何仅在 .nuspec 文件中标记运行时的依赖项?

转载 作者:行者123 更新时间:2023-12-04 15:42:11 26 4
gpt4 key购买 nike

我使用的是 Visual Studio 2017,采用旧式 .csproj 文件格式。

我正在尝试构建一组 NuGet 包。

初始层(C NuGet 包)暴露了一些核心功能。中间层(B NuGet 包)拉入 C 并提供一组方法。因此,B 依赖于 C。B 的 .nuspec 将 C 列为依赖项。

最后,我有一个应用程序 (A Application) 可以拉入 B NuGet 包。我试图避免的是我的应用程序引用了 C,但由于 C 被标记为 B 中的依赖项,因此它被添加了。

我不希望 Visual Studio 为应用程序 A 添加对 C 的引用。我只需要在运行时使用 C 工件,以便 B 仍能正常工作。

A <-- B <-- C

如果 C NuGet 包有一个 foo() 方法,我将 B NuGet 包安装到应用程序 A 中,应用程序 A 可以使用 C.foo() 方法.我只希望应用程序 A 使用公开的 B 方法。

如何创建 B .nuspec 文件以添加 C NuGet 依赖项,但将其使用限制为仅 B NuGet 包?我还需要对 C .nuspec 文件进行一些更改吗?

我已经查看了与依赖项相关的包含和排除标志,但无法找到实现我想要的组合。

我尝试使用较新的 .csproj 格式让 Visual Studio 为我创建 NuGet 包,但无法按我想要的那样工作。

如果我从应用程序 A 中删除不需要的 C 引用,我会在运行时丢失这些工件,因此这不起作用。

我看到 DevelopmentDependency 标志,它指示应从输出中排除包。我正在寻找 RuntimeDependency 的概念,它只包含在输出中。

PrivateAssets/SuppressParent 听起来不对,因为包“应该被消耗掉,但不会流到下一个项目”。

最佳答案

我采用了一种截然不同的方法来处理这个问题。我不确定我是否完全喜欢它,但它很好地满足了我的需求。

因此,NuGet 包 C 没有任何变化。它像以前一样构建和打包。

NuGet 包 B 的目标是帮助促进在服务中使用 C 中的逻辑。因此,我将 B 变成了一个仍然引用 C 的完整服务实现。B NuGet 包现在包含一个 DLL(其中包含服务契约接口(interface)),该 DLL 被拉入应用程序 A,并使用 Install.ps1 复制必要的文件到一个单独的目录。 NuGet B 包中没有列出任何依赖项。因此,应用程序 A 中的唯一引用是单个 DLL。

好处是,所有内容都在单独的目录中,B 需要的和 A 需要的之间不会存在版本控制问题。此外,A 不会背负来自 B 的不必要的依赖项。这不是最好的,因为一些 DLL 可以在两者之间共享。

关于c# - 如何仅在 .nuspec 文件中标记运行时的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57484675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com