У меня есть решение Visual Studio 2012, которое содержит 3 проекта: A.dll, B.exe и C.exe. Оба EXE-файла ссылаются на DLL, и DLL устанавливается как зависимость для обоих. Порядок сборки: A.dll, B.exe, C.exe.
У меня есть событие Pre-Build Event для A.dll: пакетный скрипт, который читает номер сборки из файла, увеличивает его и генерирует version_info.h, который содержит строковую версию номера сборки. Все три проекта включают этот заголовок и используют его для распечатки номера версии.
Каждый раз, когда я строю, запускается событие перед сборкой, номер сборки увеличивается, а заголовок обновляется. Я добавил следующее в .vcxproj для каждого проекта, чтобы обеспечить его запуск, даже если в исходный код не было внесено никаких изменений.
<PropertyGroup>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
Это работает правильно для DLL. Тем не менее, EXE всегда печатают устаревший номер сборки. Например, это последовательность событий в сборке. Я проверил, что эти события распечатываются в указанном порядке в выходных данных сборки.
Когда я запускаю программы / dll, A.dll печатает номер сборки 66, но оба EXE-файла выводят 65.
Как значение 65 компилируется в exes ПОСЛЕ того, как заголовок уже обновлен до 66?
Задача ещё не решена.
Других решений пока нет …