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 может измениться, не делая проект грязным. Вы не возражаете предоставить более подробную информацию о вашей конкретной ситуации?

Другие вопросы по тегам