Visual Studio: запуск проекта С++ Post-Build Event, даже если проект является актуальным
В Visual Studio (2008) можно ли принудительно запустить событие Post-Build для проекта С++, даже если проект обновлен?
В частности, у меня есть проект, который создает COM-сервер COM-процесса. Проект имеет шаг после сборки, который запускает "regsvr32.exe $(TargetPath)". Это отлично работает на "Rebuild", но работает на "Build", только если изменения были внесены в источник проекта.
Если я создаю "Build" без каких-либо изменений, Visual Studio просто сообщает, что проект является актуальным и ничего не делает - событие Post-Build не запускается. Есть ли способ, которым я могу заставить Событие работать в этой ситуации? Это необходимо, поскольку, хотя сама DLL обновлена, регистрационная информация не может быть.
Ответы
Ответ 1
Вы можете использовать страницу свойств Custom Build Step, чтобы настроить командный файл для запуска. Это выполняется, если файл, указанный в параметре Выходы, не найден или устарел. Просто укажите там какой-нибудь несуществующий файл, и будет выполняться шаг пользовательской сборки. Он будет работать, даже если ваш проект обновлен, так как выходной файл никогда не будет найден.
Ответ 2
Используйте этот DisableFastUpToDateCheck
Смотрите пример:
<PropertyGroup>
<PostBuildEvent>IF EXIST C:\Projects\Copy_Files_To_Instance.ps1 ( powershell -file C:\Projects\Copy_Files_To_Instance.ps1)</PostBuildEvent>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
Ответ 3
Регистрационная информация определяется в основном тем, что находится в файле .rgs
. Если этот файл изменится, проект будет построен. Я не уверен, как иначе регистрация COM может измениться, не загрязняя проект. Не возражаете ли вы предоставить более подробную информацию о вашей конкретной ситуации?
Ответ 4
В Visual Studio 2017 (возможно, и в других версиях) для проектов на С# (не проверенных для проектов C++ по фактическому вопросу OP) есть опция "Запустить событие после сборки:", и один вариант - " Всегда ", которая будет запускать Post-Build, даже если ничего не изменилось, вместо того, чтобы просто сообщать, что проект обновлен:
![enter image description here]()