在创建 nuget 包时,nuget 包的文件名中的版本似乎来自 Web 应用程序项目中的 AssemblyInfo 文件。我还在 nuspec 文件中创建了一个版本属性。
这两个版本号有什么关系,有什么约定吗?
在创建 nuget 包时,nuget 包的文件名中的版本似乎来自 Web 应用程序项目中的 AssemblyInfo 文件。我还在 nuspec 文件中创建了一个版本属性。
这两个版本号有什么关系,有什么约定吗?
关于约定,NuGet 软件本身以及它应用于库中的包的语义,按照SemVer的描述进行版本控制。具体来说,您可以通过在您的 nuspec 版本号后缀“-beta.4”或其他内容来指定 beta 版本。例如,查看图库如何显示AutoFac 的最新版本,并比较它如何显示旧版本(注意文本“这不是可用的 Autofac 的最新版本。” 编辑:图库似乎不再提供任何特殊消息对于非当前版本)和旧的预发布版本(带有文本“这是 Autofac 的预发布版本。”)。
不幸的是,AssemblyVersion
inAssemblyInfo.cs
可能不包含字母或连字符,因此不能以这种方式使用。但是,其中AssemblyInformationalVersion
可能包含字母和连字符,如果您提供它,NuGet 将使用它而不是AssemblyVersion
替换$version$
nuspec 文件中的标记。更重要的是,AssemblyInformationalVersion
(如果您在 Windows 资源管理器中检查 DLL 的详细信息,也称为“产品版本”),至少对我而言,更好地代表了 NuGet 版本应该匹配的内容。
我对这种方法有点担心,因为我希望AssemblyVersion
通过各种 beta 迭代和最终生产迭代保持不变AssemblyInformationalVersion
,这意味着我允许我的 DLL 的几个不同版本进入野外,它们的行为可能不同或不正确,但就 CLR 而言,它们都是相同的(CLR只关心AssemblyVersion
)。但在实践中,这种情况经常发生(包括上面描述的 AutoFac 包),而且似乎不会引起问题。
请参阅关于AssemblyVersion、AssemblyFileVersion 和 AssemblyInformationalVersion 之间有什么区别的两个出色的最高投票答案?了解更多信息AssemblyInformationalVersion
和朋友。
程序集版本和 nuget 包版本之间不需要存在关系。按照惯例,许多维护者对两者使用相同的编号。
nuget.exe
如果您没有 nuspec,或者您用于nuget.exe spec
创建标记化的 nuspec 文件,则使用相同编号的约定也是默认设置。但是,如果您将 $version$ 标记替换为一个值,则该值将优先并用于包文件名中。
您还可以在命令行上设置版本,该版本优先于上述所有内容。
有关 Xavier 博客的更多信息: NuGet $version$ 令牌解释