Событие предварительной сборки Visual Studio создает заголовок для решения, но не компилируется в зависимые проекты - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть решение 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 всегда печатают устаревший номер сборки.Например, это последовательность событий в сборке.Я проверил, что эти события распечатываются в указанном порядке в выводе сборки.

  1. Номер сборки в настоящее время 65 (хранится в файле).
  2. Я очищаю решение и перестраиваю.
  3. Запущено событие предварительной сборки A.dll.
    • Номер сборки увеличен до 66 (я повторяю его для создания экрана вывода, чтобы быть уверенным)
    • version_info.h изменен
  4. A.dllвстроено
  5. встроено B.exe
  6. встроено C.exe

Когда я запускаю программы / dll, A.dll печатает номер сборки 66, но оба EXE-файла выводят 65.

Как значение 65 компилируется в exes ПОСЛЕ того, как заголовок уже обновлен до 66?

...