CS1607:程序集生成 - 为“文件版本”指定的版本“1.4.0.85725”不是正常的“major.minor.build.revision”格式

时间:2014-03-06 10:01:03

标签: c# .net msbuild assemblyfileversion

(如果我在这里混淆了任何条款,请原谅我 - 我是Java开发人员,对.Net和C#不熟悉。如果需要,请在此问题上添加/更正任何标签。)

我正在使用MSBuild脚本来构建我的项目。其中一项任务是编写汇编信息:

<Target Name="UpdateAssemblyInfo">
    <Message Text="Updating assemblies to file version $(AssemblyVersion) ($(AssemblyFileVersion))" Importance="high"/>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="SharedAssemblyInfo.cs" 
                  AssemblyVersion="$(AssemblyVersion)"
                  AssemblyFileVersion="$(AssemblyFileVersion)"
                  AssemblyProduct="SVN revision $(BUILD_NUMBER)"/>
</Target>

这会转换SharedAssemblyInfo.cs

[assembly: System.Reflection.AssemblyVersion("0.0.0")]

对此:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.18063
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

[assembly: System.Reflection.AssemblyVersion("1.4.0")]
[assembly: System.Reflection.AssemblyFileVersion("1.4.0.85725")]
[assembly: System.Reflection.AssemblyProduct("SVN revision 85725")]

到目前为止一切顺利。除了我在TeamCity的构建日志中看到以下消息:

  

CSC警告CS1607:程序集生成 - 为“文件版本”指定的版本“1.4.0.85725”不是正常的“major.minor.build.revision”格式

当版本的格式符合警告信息中指定的格式时,为什么会收到此警告?

2 个答案:

答案 0 :(得分:6)

您收到错误的原因是修订号大于65534。

答案 1 :(得分:4)

  

当版本的格式符合警告信息中指定的格式时,为什么会收到此警告?

重新阅读该警告,并加以强调:

  

正常的'major.minor.build。修订'格式

.NET版本号有四个部分,而不是三个。

用于此的System.Version类型将处理更少类型的版本,但使用System.Version的代码可以检查并更严格。

此外,正如Mihai所述,该版本的元素仅限于System.UInt16.MaxValue(65535):这是Windows API限制(在System.Version中,每个元素都是System.Int32 )与编译器从各种程序集属性插入程序集的本机VS_FIXEDFILEINFO 1 资源相关。这允许Windows资源管理器等工具读取版本。

要点:

  • 该版本应该有四个部分。
  • 每个部分应在[0,65535]范围内。

1 版本存储在两个DWORD成员中:一个用于主要和次要部分,另一个用于构建和修订(尽管在Win32中没有给出这些名称)。