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