(如果我在这里混淆了任何条款,请原谅我 - 我是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”格式
当版本的格式符合警告信息中指定的格式时,为什么会收到此警告?
答案 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资源管理器等工具读取版本。
要点:
1 版本存储在两个DWORD
成员中:一个用于主要和次要部分,另一个用于构建和修订(尽管在Win32中没有给出这些名称)。