【问题标题】:Why does nuget's behavior re getting the latest package seem inconsistent?为什么 nuget 重新获取最新包的行为似乎不一致?
【发布时间】:2013-08-27 16:49:01
【问题描述】:

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

我无法在其他包中观察到这种情况。这样做有什么意义吗?

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


[更新]

下面的代码sn -p是我上面提到的测试项目的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

【问题讨论】:

  • 我希望其他软件包会以相同的方式运行,并且安装最新的软件包,除非您指定其他方式。我有时遇到的情况是,当我从自己的 nuget repo 逐步升级版本时,有时 nuget 不会自动删除旧包的痕迹,尽管它不再在任何地方使用。但这是另一个问题。

标签: .net visual-studio nuget


【解决方案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 如何解析版本的博文。也就是说,它将安装指定主要和次要版本的最新补丁。

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

【讨论】:

  • @Jin-WookChung 请参考我回答中的第一个链接。指定版本意味着这是所需的最低版本,而不是特定版本。
  • 是的,但是,moq 包不会自动更新到最新版本,即使它的版本没有发生重大变化。
  • 看起来它将获得给定主要和次要版本的最新版本。见blog.davidebbo.com/2011/01/…
  • 哦,是的,这是我问题的重点。作者 David 将此称为 “1.1 扭曲”。您能否将参考链接添加到您接受的答案中?感谢您的努力和回答。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多