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

Ian*_*oyd 4 random visual-studio build-numbers

我知道Visual Studio无法以人们期望的方式增加构建号,但它支持随机化构建号:

我的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.*")]
Run Code Online (Sandbox Code Playgroud)

然而它给出了我看来非感性的结果(甚至允许Visual Studio的伪随机版本号): 替代文字

所以更简单的问题是:

我投入了什么AssemblyInfo.cs让它发挥作用?

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

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

[assembly:AssemblyVersion("2.3.25.1")]
Run Code Online (Sandbox Code Playgroud)

表示2为主要版本,3表示次要版本,25表示内部版本号,1表示版本号.版本号如

[assembly:AssemblyVersion("1.2.*")] 
Run Code Online (Sandbox Code Playgroud)

指定1作为主要版本,2指定为次要版本,并接受默认的构建和修订号.版本号如

[assembly:AssemblyVersion("1.2.15.*")]
Run Code Online (Sandbox Code Playgroud)

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

默认内部版本号每天递增.默认修订号是随机的.

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

[1.0.0.0]
major.minor.build.revision
Run Code Online (Sandbox Code Playgroud)

[1.0.0.*]
major.minor.build.[random]
Run Code Online (Sandbox Code Playgroud)

[1.0.*]
major.minor.[daynumber].[random]
Run Code Online (Sandbox Code Playgroud)

Cod*_*ray 12

我99%确定您遇到的问题是由此行造成的:

[assembly: AssemblyFileVersion("1.0.*")]
Run Code Online (Sandbox Code Playgroud)

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

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

如果你完全厌倦了Visual Studio在留给自己的设备时做的事情(你提到它的伪随机数的愚蠢),试试这个加载项的小宝石.它会改变你的生活.


Han*_*ant 5

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

[assembly:AssemblyInformationalVersion("1.2.3.4")]

不幸的是,不是一个伟大的名字匹配.当它丢失时,编译器将复制[AssemblyVersion]的值,这就是你最终得到星号的方式.

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

替代文字

这是由以下产生的:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyInformationalVersion("1.2.3.4")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Run Code Online (Sandbox Code Playgroud)

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