msbuild ile derleme işlemimizi otomatikleştirmekle görevlendirildim. Yirmi adet Visual C++ projesi ve yirmi C# projemiz var, bu da tüm sürüm dizelerini düzenlemek için acı çekiyor. Sürüm numaralarımız yapım aşamasında et üretiyor, bu yüzden tam sürüm dizgisini komut satırında bir özellik olarak iletmeliyiz.Bir C++ kaynak dosyasındaki FILEVERSION güncelleştirmesini MSBuild kullanarak derleme hataları oluşuyor
Benim ilk uygulama .rc
ve AssemblyInfo.cs
dosyalar üzerinde değiştirmeler yapmak MSBuild Extension Pack 'ın File
görevi kullandı.
<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)"'/>
Bu AssemblyInfo.cs
dosyalar üzerinde harika çalışıyor, ama ben böyle hatalar olsun ++ projeler C herhangi derleme yaparken: İlk hata hattında 23 karşılaşıldığında
.\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
ama ne zaman Kaynak kontrolüne karşı diff MyProject.rc
her şey yolunda görünüyor. Sadece sürüm numaraları değiştirilir, bu değişiklikler satır 72'de başlar ve dosyada 0x09
dizesi görünmez. Dünyada neler oluyor burada? Çizgiler 21 - Böyle 25 görünüm:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
Ben de aynı amacı gerçekleştirmek için başka yöntemler üzerinde herhangi önerilerinize açığım.
'.' FILEVERSION'da 'Dosyayı doğru olarak almak için' ile '| Özellikleri | DLL'nin Ayrıntılar sekmesi. –