4

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

[assembly: AssemblyInformationalVersion("7.1.0.0 Private (Debug build)")]

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

  • 产品版本:7.1.0.0 Private(调试版本)
  • 产品主要部分:7
  • 产品次要部分:1

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

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

我检查了在可执行文件中找到的二进制文件版本信息,虽然版本信息中的字符串值在两个文件中都符合预期,但 VS2015 可执行文件在 VS_FIXEDFILEINFO.dwProductVersionMS 和 VS_FIXEDFILEINFO.dwProductVersionLS 字段中的值为零。

4

1 回答 1

1

我可以确认这种情况下的行为变化,AssemblyInformationalVersion例如,如果它是规范格式,"7.1.0.0"那么它在所有版本中都按预期工作,即填写产品版本主要/次要/构建/修订字段。

作为背景,AssemblyInformationalVersion 的文档实际上确实指定了:

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

[...] 虽然您可以指定任何文本,但如果字符串不是程序集版本号使用的格式,则会在编译时出现警告消息 [...]

从以上:

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

  • 有一个警告不要使用自由格式的字符串。

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

没有直接关系,但这个 VS 2010 错误报告Localized build with free form AssemblyInformationalVersion 导致 ALINK 警告 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”生成?基本上建议,一旦你偏离标准major.minor.build.revision格式,你几乎是靠自己的。

于 2015-12-19T00:33:36.080 回答