9

我正在尝试找到一种更有意义的方式来处理我的应用程序的版本控制,我遇到了这篇知识库文章

http://support.microsoft.com/kb/556041

基本上,它建议固定装配版本,并为每个构建增加文件版本。现在这对我来说很有意义,但对于我的生活,我似乎无法实现它。

下面的代码片段自动增加程序集版本和 FileVersion。

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

虽然下一个似乎设置了一个固定的程序集版本1.0.0.0和一个固定的文件版本1.0.*

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.*")]

顺便说一句,文件属性的详细信息选项卡中的产品版本现在也可以读取1.0.*。现在我可以用这个修复文件属性中的产品版本......

[assembly: AssemblyInformationalVersion("1.0")]

但这对我最初的任务没有帮助。出于好奇,我尝试了以下内容并将文件版本更改为2.0.*,所以它至少正在使用它。它只是不是自动递增。

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("2.0.*")]

因此,从我可以收集到的唯一自动递增的版本号是程序集版本,但是如果您没有指定文件版本,它会被设置为与程序集版本相同。

有谁知道在固定程序集版本的同时自动增加文件版本的方法?

4

1 回答 1

11

是的,这有点傻,微软似乎搞错了。AssemblyVersion在 .NET 程序集版本控制系统中使用,因此您永远不应自动递增它,而是AssemblyFileVersion写入文件版本资源中的文件版本条目,因此您可能有理由期望它始终默认自动递增。

我确信有一些 3rd 方构建系统可以为您执行此操作,但我只是编写了一个小命令行 C# 应用程序来执行此操作,它作为我们构建过程的一部分在每个项目上运行。这非常简单:

  1. AssemblyInfo.cs逐行读取文件。
  2. RegEx搜索该行,将所有AssemblyFileVersion四个版本部分捕获到单独的捕获组中。你可以自己解析它,但是一个正则表达式会一次性完成所有的检测和解析,所以不利用它似乎很愚蠢。
  3. 一旦你有了四个整数,就可以实现你自己认为合适的递增逻辑。
于 2012-09-06T20:10:08.890 回答