2014-11-06 2 views
2

Я спросил вчера о получении AfterBuild работы и был в состоянии получить эту работу, поместив его в самом низу секции Project: MSBuild AfterBuild StepMSBuild BeforeBuild Шаг

Я попытался точно такой же вещь с другим проектом. Это мой BeforeBuild код:

<Target Name="BeforeBuild"> 
    <Message Text="###HI###" Importance="High" /> 
</Target> 

У меня нет другого, прежде чем Target Name="BeforeBuild" в проекте, и я это помещается в самом низу секции Project. .Vcxproj анализирует/загружает в Visual Studio 2010 без проблем. У меня есть мой «MSBuild project build output/log verbocity», установленный в «Normal».

Есть ли что-то еще, о которых я не думал, что это не приведет к запуску?

+2

Хмм, C++ сборки не имеют цели BeforeBuild. Я не вижу хорошего, чтобы использовать, только достойный кандидат, которого я вижу, является целью «PreBuildEvent». Но будьте осторожны, что вы отключите Pre-Build Event, как определено в настройках, когда вы это сделаете. –

+0

Пока объявления целей находятся на уровне, разрешенном схемой, их местоположение ничего не меняет. –

+0

@HansPassant Я не знаю, если у вас будет какое-то представление о том, почему, но почему «AfterBuild» разрешен в Visual C, а «BeforeBuild» - нет? –

ответ

3

Целевое назначение не вызывается, если явно не указано явно, является целевой по умолчанию, объявляется в DependsOn объекта, который вызывается или объявляет свои собственные BeforeTargets или AfterTargets и вызывается одна из этих целей.

Итак, если вы хотите цель быть вызвана перед мишенью называется «InitializeBuildStatus», вы можете написать это:

<Target Name="MyBeforeBuild" BeforeTargets="InitializeBuildStatus"> 
    <Message Text="###HI###" Importance="High" /> 
</Target> 

Это будет работать, если цель «InitializeBuildStatus» работает. (Вы можете включить подробное ведение журнала в Visual Studio или прогон MSBuild, чтобы помочь определить соответствующие целевые объекты BeforeTarget.)

Цели «BeforeBuild» и «AfterBuild» называются явно целевой системой некоторых типов проектов Microsoft. Это обеспечивает ограниченную расширяемость. Новым (.NET 4.0) способом является BeforeTargets и AfterTargets.

См. Target Build Order.

+0

Это решение, однако, если вы делаете 'BeforeTargets =" Build ", он всегда запускается прямо перед" BuildSucceeded ". _After_ компиляция и все остальное произошло. Если вы измените свой 'BeforeTargets =" Build "' на 'BeforeTargets =" InitializeBuildStatus ", я соглашусь. –

Смежные вопросы