NuGet忽略了更新版本的依赖项

时间:2017-09-29 10:33:39

标签: visual-studio nuget nuget-package

我有两个NuGet包。套餐一,套餐二。 Package Two需要具有依赖性,因为Package One版本1.0或更高版本。

我对Package One做了一些小改动,并将NuGet Package重新构建为1.0.1版本。我没有对Package Two NuGet包进行任何更改。我还在我正在处理的解决方案中更新了Package One。

我遇到的问题是Package Two仍在尝试寻找1.0版的Package One的旧版本.dll。然而,已经安装并可以使用的是更新的版本,就像它忽略了它一样。

Package 2具有package.nuspec文件中Package One 1.0或更高版本的依赖关系。

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

  

有什么方法可以解决这个问题吗?

就像马特回答" 这是NuGet的默认行为":

  

使用NuGet 2.5及更高版本,如果已经满足依赖版本,则在其他软件包安装期间不会更新依赖关系。

所以1.0是正确的默认依赖关系解析。

NuGet v2.8开始,我们可以使用其他依赖项解析算法:

  

虽然NuGet 2.8更改了解析的默认行为   依赖性,它还增加了对依赖性的更精确控制   通过包中的-DependencyVersion开关解析进程   经理控制台。该交换机可以解决依赖关系   尽可能低的版本(默认行为)   版本,或最高版本或补丁版本。

有关这些依赖性解析算法的详细信息,请查看以下文档:

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

enter image description here

要解决此问题,您可以在程序包管理器控制台中使用以下命令:

Install-Package PackageTwo -DependencyVersion Highest

或者通过扩展选项

从Manage NuGet包UI中选择它

enter image description here

答案 1 :(得分:1)

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

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

您可以在NuGet.Config中全局覆盖它,例如:

<add key="DependencyVersion" value="HighestPatch" />

或者您可以在Visual Studio中安装NuGet包时指定。

否则,您将继续修改Package Two以依赖PackageOne的1.0.1,这可能不是您想要做的,因为Package Two仍然可以使用旧版本的Package One。