2010-04-17 2 views
6

Есть ли способ запустить определенную цель после запуска всех других целей независимо от их успеха или неудачи?«И наконец» для MSBuild

try...finally equivalent in MsBuild связан, но касается только небольшой группы целей. Мне нужно что-то для всего пакета с десятками подстроек.

ответ

1

Нет прямого способа сделать это. Обычно в MSBuild трудно узнать фактический порядок целей, только относительный порядок. Что вы пытаетесь сделать с этой целью?

+1

Вот что я пытаюсь сделать: измените AssemblyVersion, сделайте все это здание и в качестве последнего шага верните AssemblyVersion в то, что было. Не кажется, что это хороший способ сделать это. –

+0

romkyns: Я делаю то же самое. Способ сделать это - переопределить цель «CoreBuild» в вашем собственном файле csproj с дополнительным атрибутом «OnError», чтобы указать, что цель «AfterBuild» должна быть запущена, если сборка завершится с ошибкой. Таким образом, цель 'AfterBuild' будет запускаться на каждой сборке, независимо от успеха или неудачи. См. Http://stackoverflow.com/a/5169881/278185 для получения информации об переопределении цели CoreBuild. – Dave

2

Возможно, если вы завернули вещи в цель верхнего уровня, используя один или несколько CallTargets, то вы могли бы использовать задачу <OnError .../> для запуска конечной цели?

<Target Name="CompleteBuild"> 
    <CallTarget Targets="Target1"/> 
    <CallTarget Targets="Target2"/> 
    <CallTarget Targets="FinalTarget"/> 

    <OnError ExecuteTargets="FinalTarget"/> 
</Target> 
Смежные вопросы