【问题标题】:Nuget Installs Packages Of Same Solution ProjectsNuget 安装相同解决方案项目的包
【发布时间】:2018-02-07 10:53:26
【问题描述】:

我有一个奇怪的场景。

假设我正在研究一个名为 SOL 的解决方案。 该解决方案有 3 个项目:A、B 和 C。 现在,项目 A 使用项目 B 和 C 作为项目引用,因为所有这 3 个项目共享相同的解决方案,并且所有这些项目都有 nuget 包以便在其他解决方案中使用它们。

我有另一个解决方案,称为 SOL2。 该解决方案有一个项目,我们称之为 D。 D 使用 SOL 中的项目 B 和 C 作为 nuget 包,D 有自己的 nuget 包。

问题是,SOL 的项目 A 使用项目 D。 当我想在项目A上安装项目D的nuget时,它会自动将项目D的所有依赖安装为nuget包,包括B和D,它们在A的同一个解决方案上,没有任何意义。

我知道我可以使用“忽略依赖项”选项,但是我可能会跳过不在 A 的同一解决方案中的所需引用 (试着想象一个有 100 个引用的案例,而不仅仅是 2-3 个)。

有什么方法可以防止 nuget 仅安装与项目 A 相同的解决方案中的这些特定项目包?

我希望情况是可以理解的。

谢谢。

【问题讨论】:

  • 这样做会遇到什么问题? packages.config 在这种情况下并不能很好地工作,因为它没有对偶的概念(项目和包引用基本相同)。
  • 我可能错了,但我不确定你是否正确。如果项目 B 和 C 属于 A 的同一个解决方案,并且 A 使用 nuget 引用 B 和 C,那么如果我想更改项目 B 和 C 的代码,它不会影响项目 A,因为引用是特定的 DLL版本且未引用 bin/debug/projectB.dll。
  • 我认为我的评论措辞很糟糕:) packages.config 没有二元性的概念。二元性的概念是项目和包引用被视为相同。

标签: visual-studio nuget


【解决方案1】:

问题是,SOL的那个项目A使用了项目D。当我想在项目A上安装项目D nuget时,它会自动将项目D的所有依赖项安装为nuget包,包括B和D,它们在同一个A的解,没有任何意义。

需要指出的是,如果将projectD nuget 安装到projectA,那么nuget 依赖项B 和C 将替换 之前的项目引用ProjectBprojectCprojectA.

如果您不想将项目引用替换为 nuget 引用,则应阻止 nuget 仅安装与项目 A 相同的解决方案中的这些特定项目包。这就是您所要求的。唯一直接的方法是使用Ignore Dependencies,但正如您所说,它也会忽略projectD所有 依赖项。为了解决这个问题,我能想到的解决方法是在创建nuget包ProjectD之后删除依赖项projectB

您可以从 windows 商店获取 nuget 包资源管理器并安装它:

然后用nuget包资源管理器打开nuget包projectD,去掉这些特定项目包在项目A的同一个解决方案上的依赖,比如projectB

在这种情况下,您可以阻止 nuget 仅安装与项目 A 相同的解决方案中的这些特定项目包。

希望这会有所帮助。

【讨论】: