33

在创建 nuget 包时,nuget 包的文件名中的版本似乎来自 Web 应用程序项目中的 AssemblyInfo 文件。我还在 nuspec 文件中创建了一个版本属性。

这两个版本号有什么关系,有什么约定吗?

4

2 回答 2

22

关于约定,NuGet 软件本身以及它应用于库中的包的语义,按照SemVer的描述进行版本控制。具体来说,您可以通过在您的 nuspec 版本号后缀“-beta.4”或其他内容来指定 beta 版本。例如,查看图库如何显示AutoFac 的最新版本,并比较它如何显示旧版本注意文本“这不是可用的 Autofac 的最新版本。” 编辑:图库似乎不再提供任何特殊消息对于非当前版本)和旧的预发布版本(带有文本“这是 Autofac 的预发布版本。”)。

不幸的是,AssemblyVersioninAssemblyInfo.cs可能不包含字母或连字符,因此不能以这种方式使用。但是,其中AssemblyInformationalVersion可能包含字母和连字符,如果您提供它,NuGet 将使用它而不是AssemblyVersion替换$version$nuspec 文件中的标记。更重要的是,AssemblyInformationalVersion(如果您在 Windows 资源管理器中检查 DLL 的详细信息,也称为“产品版本”),至少对我而言,更好地代表了 NuGet 版本应该匹配的内容。

我对这种方法有点担心,因为我希望AssemblyVersion通过各种 beta 迭代和最终生产迭代保持不变AssemblyInformationalVersion,这意味着我允许我的 DLL 的几个不同版本进入野外,它们的行为可能不同或不正确,但就 CLR 而言,它们都是相同的(CLR关心AssemblyVersion)。但在实践中,这种情况经常发生(包括上面描述的 AutoFac 包),而且似乎不会引起问题。

请参阅关于AssemblyVersion、AssemblyFileVersion 和 AssemblyInformationalVersion 之间有什么区别的两个出色的最高投票答案?了解更多信息AssemblyInformationalVersion和朋友。

于 2013-08-14T17:13:29.707 回答
10

程序集版本和 nuget 包版本之间不需要存在关系。按照惯例,许多维护者对两者使用相同的编号。

nuget.exe如果您没有 nuspec,或者您用于nuget.exe spec创建标记化的 nuspec 文件,则使用相同编号的约定也是默认设置。但是,如果您将 $version$ 标记替换为一个值,则该值将优先并用于包文件名中。

您还可以在命令行上设置版本,该版本优先于上述所有内容。

有关 Xavier 博客的更多信息: NuGet $version$ 令牌解释

于 2012-08-15T13:45:11.903 回答