使用星号时是啥导致程序集版本增加?

Posted

技术标签:

【中文标题】使用星号时是啥导致程序集版本增加?【英文标题】:What causes Assembly Version incrementation when using asterisk?使用星号时是什么导致程序集版本增加? 【发布时间】:2013-07-17 04:47:29 【问题描述】:

如果我有一个汇编版本,例如:

[assembly: AssemblyVersion("2013.7.18.*")]

读取此版本号时,将类似于2013.7.18.123

是什么导致最终数字递增?

【问题讨论】:

【参考方案1】:

递增,这需要构建系统知道以前的版本。它没有这样的知识。你基本上得到一个随机数。这不是随机的,修订号是从一天中的时间生成的。内部版本号也可以是随机的,它是从日期生成的。

请注意使用2013.7.18.* 的后果,您无法保证它是唯一的。如果您曾经在完全相同的时间构建,那么您将获得完全相同的数字。它也不会自动成为一个更大的 版本号,更早构建,你会倒退。这些不是版本号的重要属性。

或者换句话说,只有使用1.0.* 才有意义,它会生成一个始终增加的版本号。因为内部版本号总是会更大。

还值得注意的是,您确实尝试将日期放在版本号中。你已经明白了,如果你让它选择内部版本号,你总是可以从结果中对构建日期进行逆向工程。内部版本号是自 2000 年 1 月 1 日以来的天数,修订版号是自午夜以来的秒数(没有 DST 更正)除以 2。

【讨论】:

【参考方案2】:

AssemblyVersionAttribute Class:

您可以指定所有值,也可以使用星号 () 接受默认内部版本号、修订号或两者。例如,[assembly:AssemblyVersion("2.3.25.1")] 表示 2 为主要版本,3 为次要版本,25 为内部版本号,1 为修订号。诸如 [assembly:AssemblyVersion("1.2.")] 的版本号指定 1 作为主要版本,2 作为次要版本,并接受默认的构建和修订号。诸如 [assembly:AssemblyVersion("1.2.15.*")] 的版本号指定 1 作为主要版本,2 作为次要版本,15 作为内部版本号,并接受默认修订号。默认内部版本号每天递增。默认修订号是随机的。

【讨论】:

是的,Wisenheimer 先生,如果您能启发好心的读者,您认为引用文档的哪一部分(截至三年前)是错误的,您的评论会很有帮助。 如前所述,您可以在其他答案中阅读。主要是The default revision number is random. 和建议的[assembly:AssemblyVersion("1.2.15.*")](如果修订被星号掩盖,则会导致奇怪的错误)。

以上是关于使用星号时是啥导致程序集版本增加?的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps Build Pipeline:如何仅为更改的程序集增加程序集版本?

我应该在构建软件时自动增加程序集版本吗?

在 SemVer 中,当向公众发布测试版时,程序集+文件版本应该是啥? [关闭]

如何通过我们的 CI 平台 (Hudson) 自动增加 C# 程序集版本?

在 C# 中的程序集上下文中,激活范围指的是啥?

编译时自动增加exe版本,Visual Studio