假设有一个项目依赖于 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 。
答案 0 :(得分:1)
这取决于包清单。如果您是pack
命令,则检测来自csproj
的依赖关系,它将指定版本为1.9.1。但是,NuGet将其视为最小版本,而不是所需版本。
请参阅http://docs.nuget.org/docs/reference/versioning#Specifying_Version_Ranges_in_.nuspec_Files
现在,由于新版本是1.9.2,因此每个语义版本控制不会被视为重大更改,因此安装是安全的。
另请注意此博客文章,了解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包的元数据。