Nuget NuSpec版本属性与程序集版本

Nuget NuSpec版本属性与程序集版本,nuget,nuget-package,Nuget,Nuget Package,创建nuget包时,nuget包文件名中的版本似乎来自web应用程序项目中的AssemblyInfo文件。我还在nuspec文件中创建了一个version属性 这两个版本号之间的关系是什么?是否附加了任何约定?程序集版本和nuget软件包版本之间不需要有关系。按照惯例,许多维护人员对这两个项目使用相同的编号 如果没有nuspec,则使用相同编号的约定也是默认的nuget.exe,或者使用nuget.exe spec创建标记化的nuspec文件。但是,如果将$version$标记替换为一个值,则该

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


这两个版本号之间的关系是什么?是否附加了任何约定?

程序集版本和nuget软件包版本之间不需要有关系。按照惯例,许多维护人员对这两个项目使用相同的编号

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

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

更多关于Xavier博客的信息:

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

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

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

有关
AssemblyInformationalVersion
和friends的更多信息,请参阅两个投票率最高的优秀答案