如果nuget为零,为什么nuget却忽略了修订号而恢复了软件包?

时间:2020-07-22 06:10:53

标签: .net nuget nuget-package-restore

我在项目中添加了一个版本为1.0.1.0的软件包,但是每当我尝试恢复该软件包时,nuget都会尝试忽略最后一个零(即修订号)来寻找1.0.1软件包?

为什么这样做?并且有什么办法可以让nuget在还原时寻找确切和完整版本的软件包?

1 个答案:

答案 0 :(得分:0)

自从NuGet版本> = 3.4开始,

包装版本为normalized,位于 pack restore 上。

版本号第四部分的零将被省略

NuGet现在使用semantic versioning,它为版本号指定了固定格式。

特定版本号的格式为Major.Minor.Patch [-Suffix]

前三个部分是必需的,后缀是可选的。

  • 主要:重大更改
  • 次要功能:新功能,但向后兼容
  • 补丁:仅向后兼容的错误修复
  • -后缀(可选):连字符和后跟表示预发行版本的字符串[...]

这与您习惯的.NET assembly versioning方案不同。由于此版本控制方案与NuGet的语义版本控制不兼容,因此根据您的工具所实现的NuGet版本,最后一个数字将被省略,如上所述。

例如,在Visual Studio 2019中,如果您有多个版本1.0.1.01.0.1.11.0.1.42,它们都将被列出,您可以安装特定版本。但是,尾随修订版本号为0时将被忽略,即使您构建自己的程序包也不会附加。

对于已经构建的软件包,此规范化不会影响软件包本身中的版本号。它只影响解决依赖关系时NuGet与版本匹配的方式。

因此,如果仅消费包而不能更改它,则忽略它。但是,如果您自己构建软件包,则应切换到语义版本控制,并将构建和修订版本号合并为单个Patch号,或者如果仅用于预发行版本,则使用诸如1.0.1-pre1之类的后缀包。