修复了具有自动增量文件版本的汇编版本?

时间:2012-09-06 19:55:14

标签: c# .net version

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

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

基本上它建议修复程序集版本,并为每个构建增加文件版本。现在这对我来说是完全合理的,但对于我的生活,我似乎无法实现它。

以下代码段自动递增Assembly版本和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.*")]

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

有没有人知道在保留程序集版本的同时自动增加文件版本的方法?

1 个答案:

答案 0 :(得分:11)

是的,这有点傻,微软似乎已经错了。 AssemblyVersion用于.NET程序集版本控制系统,因此您永远不应该自动递增它,但AssemblyFileVersion会写入文件版本资源中的文件版本条目,因此您可能会合理地期望它默认情况下始终自动递增。

我确信有一些第三方构建系统可以为你做这个,但我只是编写了一个小命令行C#app来做它,并且它作为我们构建的一部分在每个项目上运行处理。这非常简单:

  1. 逐行阅读AssemblyInfo.cs文件。
  2. 执行RegEx搜索AssemblyFileVersion行,将所有四个版本部分捕获到单独的捕获组中。你可以自己解析它,但是一个正则表达式会一次性完成所有的检测和解析,所以看起来没有利用它是愚蠢的。
  3. 一旦有了四个整数,就可以根据需要实现自己的递增逻辑。