Visual Studio: запуск проекта C++ Post-Build Event, даже если проект обновлен
В Visual Studio (2008) возможно ли принудительно запустить событие Post-Build для проекта C++, даже если проект обновлен?
В частности, у меня есть проект, который создает библиотеку DLL внутрипроцессного сервера. У проекта есть шаг после сборки, который запускает "regsvr32.exe $(TargetPath)". Это нормально работает на "Перестроить", но работает на "Сборка", только если были внесены изменения в исходный код проекта.
Если я выполняю "Сборку" без внесения каких-либо изменений, Visual Studio просто сообщает, что проект обновлен и ничего не делает - событие после сборки не запускается. Есть ли способ, которым я могу заставить Событие работать в этой ситуации? Это необходимо, поскольку, хотя сама DLL-библиотека актуальна, информация о регистрации может отсутствовать.
3 ответа
Вы можете использовать страницу свойств Custom Build Step, чтобы настроить запуск пакетного файла. Он запускается, если файл, указанный в параметре " Выходы", не найден или устарел. Просто укажите там какой-нибудь несуществующий файл, и пользовательский шаг сборки всегда будет выполняться. Он будет работать, даже если ваш проект обновлен, поскольку выходной файл не найден.
Используйте этот 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>
В Visual Studio 2017 (возможно, и в других версиях) для проектов C# (не проверенных на проекты C++ по фактическому вопросу OP) есть опция "Запустить событие после сборки:", и одна опция - "Всегда", который запустит Post-Build, даже если ничего не изменилось, вместо простого сообщения о том, что проект обновлен:
Регистрационная информация определяется в основном тем, что находится в .rgs
файл. Если этот файл изменится, проект будет построен. Я не уверен, как иначе регистрация COM может измениться, не делая проект грязным. Вы не возражаете предоставить более подробную информацию о вашей конкретной ситуации?