创建Nuget包时,Nuget包的文件名中的版本似乎来自Web应用程序项目中的
AssemblyInfo
文件。我还在 .nuspec
文件中创建了一个版本属性。
这两个版本号有什么关系,有什么约定吗?
关于约定,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
和朋友的更多信息。