我的Visual Studio自动递增构建号语法有什么问题?

时间:2010-12-05 15:49:12

标签: visual-studio random build-numbers

我知道Visual Studio无法以人们期望的方式增加内部版本号,但它支持randomizing the build number

我的AssemblyInfo.cs文件包含:

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

然而它给出了我看来非感性的结果(甚至允许使用Visual Studio的伪随机版本号): alt text

所以更简单的问题是:

  

我将AssemblyInfo.cs放入什么才能使其有效?

来自MSDN(为清晰起见重新格式化):

  

您可以指定所有值或您   可以接受默认的内部版本号,   修订号,或两者都使用   星号(*)。例如,

[assembly:AssemblyVersion("2.3.25.1")]
     

表示2为主要版本,3表示为   次要版本,25作为构建   数字,1作为修订号。   版本号,例如

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

指定1为主要版本,2为   次要版本,并接受   默认构建和修订号。一个   版本号,如

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

指定1为主要版本,2为   次要版本,15作为构建   数字,并接受默认值   修订号。

     

默认内部版本号递增   日常。默认修订号   是随机的。

我认为这意味着版本号是:

[1.0.0.0]
major.minor.build.revision

,而

[1.0.0.*]
major.minor.build.[random]

[1.0.*]
major.minor.[daynumber].[random]

2 个答案:

答案 0 :(得分:12)

我99%确定你遇到的问题是由这一行引起的:

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

问题在于 Visual Studio不支持自动递增AssemblyFileVersion,只支持AssemblyVersion所以其余代码应该没问题。尝试简单地评论第二行,看看你是否得到了你期望的结果。您的文件和产品的所有版本信息都应该是等效的。

我不知道这正式记录在哪里(除了您尝试在“项目属性”下的“程序集信息”对话框中输入“文件版本”字段的星号时收到的错误消息),但它在我可以访问的每台机器上都能正常工作。

如果你完全厌倦了Visual Studio在留给自己的设备时做的事情(你提到它的伪随机数的愚蠢),试试加法的this little gem。它会改变你的生活。

答案 1 :(得分:5)

屏幕截图显示您使用shell属性表扩展处理程序,该处理程序显示嵌入在大多数EXE和DLL文件(包括.NET文件)中的非托管版本资源。不幸的是,从Vista开始,该处理程序不再显示该资源中的可选字段。 ProductVersion字段是标准字段,但 [AssemblyVersion]。您必须在AssemblyInfo.cs中添加相应的属性。例如:

  

[assembly:AssemblyInformationalVersion(“1.2.3.4”)]

不幸的是,这不是一个伟大的名字匹配。当它丢失时,编译器将复制[AssemblyVersion]的值,这就是你用星号结束的方式。

编译器实际上会在资源中发出额外字段。您可以使用File + Open + File查看它,选择您的程序集,打开Version节点并双击资源#1:

alt text

由...生成:

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

它在那里,你在资源管理器中看不到。真可惜,希望有一天他们会解决这个问题。另请注意生成的[AssemblyVersion],版本号是18404.它不是随机的,我在上午10:13建立了这个EXE。那是从午夜起18404 * 2秒。