我的任務是使用msbuild自動執行構建過程。我們有大約20個Visual C++項目和20個C#項目,這讓手工編輯所有版本字符串變得非常痛苦。我們的版本號是在編譯時生成的,因此我們需要在命令行中將完整版本字符串作爲屬性傳遞。使用MSBuild更新C++資源文件中的FILEVERSION導致編譯失敗
我最初的實現使用MSBuild Extension Pack的File
任務來替換.rc
和AssemblyInfo.cs
文件。
<FileSystem.File TaskAction="Replace" Files="@(AssemblyInfoFiles)" RegexPattern='\[assembly: AssemblyVersion\(".*"\)\]' Replacement='[assembly: AssemblyVersion("$(Version)")]'/>
<FileSystem.File TaskAction="Replace" Files="@(AssemblyInfoFiles)" RegexPattern='\[assembly: AssemblyFileVersion\(".*"\)\]' Replacement='[assembly: AssemblyFileVersion("$(Version)")]'/>
<FileSystem.File TaskAction="Replace" Files="@(RCFiles)" RegexPattern="FILEVERSION\s+\S+" Replacement="FILEVERSION $(Version)"/>
<FileSystem.File TaskAction="Replace" Files="@(RCFiles)" RegexPattern="PRODUCTVERSION\s+\S+" Replacement="PRODUCTVERSION $(Version)"/>
<FileSystem.File TaskAction="Replace" Files="@(RCFiles)" RegexPattern='VALUE\s+"FileVersion",\s*".*"' Replacement='VALUE "FileVersion", "$(Version)"'/>
<FileSystem.File TaskAction="Replace" Files="@(RCFiles)" RegexPattern='VALUE\s+"ProductVersion",\s*".*"' Replacement='VALUE "ProductVersion", "$(Version)"'/>
這是在AssemblyInfo.cs
文件偉大的工作,但是當我編譯任何C++的項目中,我得到這樣的錯誤:
.\MyProject.rc(23): error RC2135: file not found: 0x09
.\MyProject.rc(71): error RC2135: file not found: 1
.\MyProject.rc(72): error RC2135: file not found: 6
.\MyProject.rc(73): error RC2135: file not found: 6
.\MyProject.rc(74): error RC2135: file not found: 0x3fL
.\MyProject.rc(80): error RC2135: file not found: FILEOS
.\MyProject.rc(81): error RC2135: file not found: 0x2L
.\MyProject.rc(84): error RC2164: unexpected value in RCDATA
.\MyProject.rc(86): error RC2135: file not found: BLOCK
.\MyProject.rc(88): error RC2135: file not found: VALUE
上線23遇到的第一個錯誤,但是當我diff MyProject.rc
針對源代碼控制一切看起來不錯。只更改版本號,這些更改從第72行開始,字符串0x09
不出現在文件的任何位置。這個世界正在發生什麼?線21 - 25這個樣子的:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
我也開放給其他方法的任何建議,以達到同樣的目標。
您必須替換'。'用FILEVERSION中的','在File |中進行設置屬性| DLL的詳細信息選項卡。 – 2011-10-20 16:35:51