2014-03-06 27 views
2

(請原諒,如果我在此處混淆了任何術語 - 我是一個Java開發人員,是.Net和C#的新手。如果需要,請在此問題上添加/更正任何標記。)CS1607:程序集生成 - 爲'文件版本'指定的版本'1.4.0.85725'不是正常的'major.minor.build.revision'格式

我正在使用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'格式

爲什麼我會收到此警告,此時版本的格式顯示爲遵循警告消息中指定的格式?

回答

6

爲什麼你所得到的錯誤的原因是因爲版本號大於65534

+1

我想這解釋了爲什麼,當我看一個DLL版本的屬性時,**產品版本**是** 1.4.0.85725 **,而**文件版本**是** 1.4.0.20189 * *。 – vegemite4me

4

爲什麼會收到這樣的警告,當該版本的格式似乎遵循警告指定的格式信息?

請再讀一次警告,並增加了一些重點:

正常「major.minor.build。 修訂'格式

.NET版本號有四個部分,而不是三個。

用於此目的的System.Version類型將處理較少類型的版本,但使用System.Version的代碼可能會檢查並更嚴格。

另外,如由Mihai指出的,版本元素被限制爲System.UInt16.MaxValue(65535):這是一個Windows API限制(在System.Version每個元素是一個System.Int32)相關的天然VS_FIXEDFILEINFO 資源,它編譯器從各種程序集屬性插入到程序集中。這允許像Windows資源管理器這樣的工具讀取版本。

摘要:

  • 應該有部分版本。
  • 每個部分應該在[0,65535]的範圍內。

的版本存儲在兩個DWORD成員:一個是主要和次要的部分,另一個用於構建和修訂(儘管沒有給出在Win32中的名稱)。

相關問題