NuSpec 版本属性与程序集版本

问题描述 投票:0回答:2

创建Nuget包时,Nuget包的文件名中的版本似乎来自Web应用程序项目中的

AssemblyInfo
文件。我还在
.nuspec
文件中创建了一个版本属性。

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

nuget nuget-package
2个回答
23
投票

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

不幸的是,

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

我对这种方法有一点担心,因为我希望通过各种 beta 迭代和

AssemblyVersion
的最终生产迭代使
AssemblyInformationalVersion
保持不变,这意味着我允许我的 DLL 有多个不同版本在野外,它们的行为可能不同或不正确,但就 CLR 而言都是相同的(CLR only 关心
AssemblyVersion
)。但实际上,这种情况经常发生(包括上述 AutoFac 软件包),而且似乎不会造成问题。

请参阅 AssemblyVersion、AssemblyFileVersion 和 AssemblyInformationalVersion 之间有什么区别? 的两个获得最高票数的优秀答案,了解有关

AssemblyInformationalVersion
和朋友的更多信息。


11
投票

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

如果您没有 nuspec,或者使用

nuget.exe

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

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

有关 Xavier 博客的更多信息:

NuGet $version$ 令牌解释

© www.soinside.com 2019 - 2024. All rights reserved.