Используя MSBuild для обновления FILEVERSION в файле ресурсов C++ вызывает отказы компиляции

Для меня определили задачу с автоматизацией нашего процесса сборки с msbuild. У нас есть приблизительно двадцать проектов Visual C++ и двадцать проектов C#, делающих это боль, чтобы вручить редактированию все строки версии. Наши номера версий сгенерированы сутью во время изготовления, таким образом, мы должны передать строку полной версии как свойство на командной строке.

Мое начальное внедрение использовало Пакет Расширения MSBuild File задача сделать замены на .rc и AssemblyInfo.cs файлы.







Это работает отлично на 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, но когда я разность 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

Я также открыт для любых предложений на других методах для выполнения той же цели.

7
задан Anthony Mastrean 21 October 2011 в 13:08
поделиться

2 ответа

Действие Replace TaskAction вставляло символы Unicode, в то время как файлы rc использовали кодировку ASCII. Добавление TextEncoding = "ASCII" ко всем задачам замены rc приводит к созданию компилируемых файлов.

Ограничением использования набора символов ASCII является то, что вы не можете использовать символ ©. Но если вы выберете TextEncoding = "Windows-1252", это решит проблему.

6
ответ дан 6 December 2019 в 19:36
поделиться

Я бы отделил информацию о версии от файлов AssemblyInfo.cs и *.rc. Создайте AssemblyVersion.cs и Version.rc файлы, которые содержат (общую) информацию о версиях для всех ваших сборок. Вы должны генерировать их в начале сборки. Поскольку они содержат только информацию о версиях, вам не нужно использовать регулярные выражения, вы можете каждый раз перезаписывать весь файл.

4
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: