NuGet忽略依赖项的更新版本

6
我有两个NuGet包,Package One和Package Two。Package Two需要将其依赖项设置为Package One的1.0或更高版本。
我对Package One进行了一些小的更改,并重新构建了NuGet包到版本1.0.1。我没有对Package Two NuGet包进行任何更改。我还在我正在工作的解决方案中更新了Package One。
我遇到的问题是Package Two仍然尝试寻找旧版本1.0的Package One .dll。尽管已经安装并可用于使用较新的版本,但它似乎忽略了它。
Package Two在package.nuspec文件中具有1.0或更高版本的Package One依赖项。
有没有办法解决这个问题?

@Leo-MSFT 是的,我成功修复了它。抱歉回复晚了,因为我有一段时间没有被分配做任何与Nuget相关的工作,所以无法使用您或Matt的答案。 - Sam Bunting
2个回答

5

有没有办法解决这个问题?

正如Matt所回答的"这是NuGet的默认行为":

从NuGet 2.5开始,如果依赖版本已经满足,其他软件包安装过程中就不会更新依赖关系。

因此,1.0是正确的默认依赖关系解析。

NuGet v2.8以来,我们可以使用其他依赖关系解析算法:

尽管NuGet 2.8更改了解析依赖项的默认行为,但它还通过包管理器控制台中的-DependencyVersion开关添加了对依赖项解析过程的更精确控制。该开关使得解析依赖项到最低可能版本(默认行为)、最高可能版本或最高次要或修补版本成为可能。

有关这些依赖关系解析算法的详细信息,请参见下面的文档:

https://learn.microsoft.com/en-us/nuget/tools/ps-ref-install-package

enter image description here

为了解决这个问题,您可以在包管理器控制台中使用以下命令:
Install-Package PackageTwo -DependencyVersion Highest

或者通过展开选项从“管理 NuGet 包”界面选择:

enter image description here


你好,@Leo Liu-MSFT,你使用哪个版本的VS?我正在使用2019年的版本,在下面的选项中,我没有安装和卸载的选项。 - Vincent

2
这是 NuGet 的默认行为,它会安装依赖项的最低补丁版本。

https://learn.microsoft.com/en-us/nuget/consume-packages/dependency-resolution

您可以在NuGet.Config中全局覆盖此设置,例如:
<add key="DependencyVersion" value="HighestPatch" />

或者您可以在Visual Studio中安装NuGet包时指定此选项。
注意:覆盖DependencyVersion仅适用于使用packages.config的项目。
否则,您只能修改Package Two以依赖于PackageOne的1.0.1版本,但这可能不是您想要做的,因为Package Two仍将与旧版本的Package One一起工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接