AssemblyInformationalVersion属性行为改变:故意还是错误?

时间:2015-12-18 18:31:44

标签: c# visual-studio-2015 fileversioninfo

在使用VS2013构建的C#项目中,我可以将它放在AssemblyInfo.cs文件中:

var request = 'randomcode';
$.post('../php/forms/postrequest.php', 'type=' + request, function (response) {
   var accesscode = response;
alert(accesscode);
});

当我对另一个项目中的可执行文件使用FileVersionInfo.GetVersionInfo .NET API时,我发现这些值已报告:

  • 产品版本:7.1.0.0 Private(Debug build)
  • ProductMajorPart:7
  • ProductMinorPart:1

当我在使用VS2015构建的C#项目中使用相同的属性和字符串值时,ProductMajorPart和ProductMinorPart属性将报告为零!

有人知道行为改变是否是故意的?

我已检查过可执行文件中找到的二进制文件版本信息,虽然版本信息中的字符串值与两个文件中的预期值一致,但VS2015可执行文件在VS_FIXEDFILEINFO.dwProductVersionMS和VS_FIXEDFILEINFO.dwProductVersionLS字段中的值为零。 / p>

1 个答案:

答案 0 :(得分:1)

我可以确认此案例的行为更改,并观察到如果AssemblyInformationalVersion是规范格式,例如"7.1.0.0"那么它在所有版本中都按预期工作,即产品版本主要填写/ minor / build / revision字段。

对于背景,docs for AssemblyInformationalVersion实际上指定了:

  

此类定义的属性将附加版本信息附加到程序集。如果将此属性应用于程序集,则可以在运行时使用Application.ProductVersion属性获取它指定的字符串。

     

[...]虽然您可以指定任何文本,但如果字符串不是使用程序集版本号[...]

所使用的格式,则会在编译时显示警告消息

从上面开始:

  • 除了可以检索字符串本身之外,没有正式的保证;

  • 警告不要使用自由格式字符串。

您可能,甚至应该在VS connect上提交错误报告,尽管我的感觉是MS在AssemblyInformationalVersion中将自由格式字符串视为不受支持的"意外的"功能,并且可能不会考虑将未记录的行为更改为" bug"适当的。

并非直接相关,但此VS 2010错误报告Localized build with free form AssemblyInformationalVersion causes ALINK warning AL1053已被MS关闭为won't fix

同样,Why is warning CS1607 “The version specified for the 'product version' is not in the normal 'major.minor.build.revision' format” generated?上接受的答案基本上建议,一旦您偏离标准major.minor.build.revision格式,您几乎可以独立完成。

相关问题