为什么nuget的行为重新获得最新的包似乎不一致?

时间:2013-08-27 16:49:01

标签: .net visual-studio nuget

假设有一个项目依赖于 xunit v 1.9.1 包,其输出程序集作为nuget包发布。 现在,如果使用Install-Package命令安装软件包,则依赖的xunit软件包将安装为 v1.9.2 而不是v1.9.1。

我无法在其他包装中观察到这种情况。这个案子有什么意义吗?

在这个问题上,nuget版本是v2.7


[更新]

以下代码段是我上面提到的测试项目的nuspec文件的一部分。

<dependencies>
  <dependency id="xunit" version="1.9.1" />
  <dependency id="Moq" version="4.0.10827"/>
</dependencies>

当我安装我的测试项目时,Moq软件包安装为上面指定的相同版本,但最近的Moq版本是v4.1.1308.2321,根据semver没有改变。相反,xunit软件包安装为最新的 v 1.9.2

2 个答案:

答案 0 :(得分:1)

这取决于包清单。如果您是pack命令,则检测来自csproj的依赖关系,它将指定版本为1.9.1。但是,NuGet将其视为最小版本,而不是所需版本。

请参阅http://docs.nuget.org/docs/reference/versioning#Specifying_Version_Ranges_in_.nuspec_Files

现在,由于新版本是1.9.2,因此每个语义版本控制不会被视为重大更改,因此安装是安全的。

请参阅http://semver.org/

另请注意此博客文章,了解NuGet如何解析版本。也就是说,它将为指定的Major和Minor版本安装最新的补丁。

http://blog.davidebbo.com/2011/01/nuget-versioning-part-2-core-algorithm.html

答案 1 :(得分:0)

您是否明确指定了版本?如果没有,那么我对安装1.9.2并不感到惊讶,因为那是最近的,并且它向后兼容1.9.1。

这是包管理系统的一般预期行为,如果您没有明确指定版本,它将尝试获取最新版本。

您可以在项目的参考条目中更改该行为(告知确切的或最小的版本号)。事情也可能取决于nuget包的元数据。