【问题标题】:NuSpec version attribute vs assembly versionNuSpec 版本属性与程序集版本
【发布时间】:2012-08-15 08:07:11
【问题描述】:

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

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

【问题讨论】:

    标签: nuget nuget-package


    【解决方案1】:

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

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

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

    有关AssemblyInformationalVersion 和朋友的更多信息,请参阅What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion? 的两个投票率最高的优秀答案。

    【讨论】:

      【解决方案2】:

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

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

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

      Xavier 博客的更多信息:NuGet $version$ token explained

      【讨论】:

        猜你喜欢
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        相关资源
        最近更新 更多