我知道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的伪随机版本号):
所以更简单的问题是:
我将
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]
答案 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:
由...生成:
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyInformationalVersion("1.2.3.4")]
[assembly: AssemblyFileVersion("1.0.0.0")]
它在那里,你在资源管理器中看不到。真可惜,希望有一天他们会解决这个问题。另请注意生成的[AssemblyVersion],版本号是18404.它不是随机的,我在上午10:13建立了这个EXE。那是从午夜起18404 * 2秒。