Подавление C++ «события после сборки» при использовании msbuild

Я использую msbuild для создания проекта C++ и хочу подавить «событие после сборки». Я безуспешно пробовал следующие свойства:

/property:PostBuildEvent=
/property:VCPostBuildEventTool=

Ни то, ни другое не имеет значения, и события после сборки по-прежнему выполняются.

Кто-нибудь знает, как подавить эти (и, возможно, другие) события с помощью msbuild?


person Rob    schedule 05.11.2008    source источник
comment
Является ли это конкретной проблемой С++, так как я обнаружил, что выполнение /p:PostBuildEvent= подавляет событие после сборки для проекта С#?   -  person RobV    schedule 08.09.2010


Ответы (4)


Я только что понял, как это сделать. Там 2 шага:

Во-первых, если вы еще не запускаете процесс msbuild с помощью пакетного файла, создайте пакетный файл, который вызывает процесс msbuild. Затем добавьте переменную в пакетный файл перед вызовом процесса msbuild. Что-то вроде этого:

set ISFULLBUILD=True
msbuild TFSBuild.proj >> BuildOutput.txt

Затем вам нужно изменить событие после сборки, чтобы что-то делать только в том случае, если переменная не установлена ​​или имеет неправильное значение:

IF NOT '%ISFULLBUILD%'=='True' copy /y $(TargetFileName) "..\..\..\..\..\..\Binaries\$(ConfigurationName)\"

В этом случае TargetFileName (Whatever.dll) будет скопирован только при сборке из Visual Studio. Но когда вы строите с использованием нового командного файла, он НЕ будет выполнять команду после оператора IF.

person leftend    schedule 28.01.2009

Вы пытались установить событие сборки на что-то, кроме пустого? Если вы перезапишете его чем-то лишним, например, «каталогом» или чем-то еще, будут ли выполняться исходные шаги после сборки?

Это не самое элегантное решение, но оно может сработать.

person Paul Fedory    schedule 05.11.2008

Ок, похоже, что msbuild на самом деле вызывает vcbuild, который не такой гибкий, поэтому я думаю, что застрял.

person Rob    schedule 05.11.2008

Если вы можете изменить события после сборки, вы можете сделать это с помощью переменной среды, например SKIP_POST_BUILD_EVENTS. Затем вы можете установить эту переменную среды перед вызовом msbuild и проверить, существует ли переменная в событии после сборки, прежде чем выполнять какой-либо код.

person Sunlight    schedule 10.11.2008