4

我知道 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.*")]

然而,在我看来,它给出了无意义的结果(甚至允许 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]
4

2 回答 2

12

我 99% 确定您遇到的问题是由以下行引起的:

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

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

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

如果您完全厌倦了 Visual Studio 在其自己的设备上的处理方式(您提到了它的伪随机数的愚蠢),请尝试这个插件的小宝石。它会改变你的生活。

于 2010-12-05T15:59:28.070 回答
5

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

[组装:组装信息版本(“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 秒。

于 2010-12-05T16:21:36.030 回答