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