2014-11-27 2 views

ответ

1

Там в CallTarget, который вы будете использовать как

<Target Name="DoStuff" > 
    <Message Text="Doing stuff..." /> 
    <CallTarget Targets="DoOtherThing" /> 
    <Message Text="Doing more stuff..." /> 
</Target> 

и есть более идиоматических, хотя и немного сверху для этого случая, Путь:

<ItemGroup> 
    <MyTargets Include="Message1" /> 
    <MyTargets Include="DoOtherThing" /> 
    <MyTargets Include="Message2" /> 
</ItemGroup> 

<Target Name="Message1" /> 
    <Message Text="Doing stuff..." /> 
</Target> 

<Target Name="DoOtherThing" /> 
    <CallTarget Targets="DoOtherThing" /> 
</Target> 

<Target Name="Message2" /> 
    <Message Text="Doing more stuff..." /> 
</Target> 

<Target Name="DoStuff" DependsOnTargets="@(MyTargets)"> 
</Target> 
+0

:) эти два пути не эквивалентны - DependsOn вызовет все цели перед DoStuff, а не посередине. Также он не будет иметь доступ к облачным свойствам и элементам DoStuff. Но CallTarget на противоположной стороне не является стилем MSBuild. –

+0

Ну, но сам DoStuff - это просто пустой заглушка, поэтому они эквивалентны: оба случая приводят к сообщению/DoOtherThing/Message – stijn

+0

В этом конкретном случае - да, но это «теория», на практике автор вопроса, вероятно, будет запускать его в более реалистичном условия, при которых эти две вещи не являются одинаковыми (более того, -дитиоматический способ будет выполнять цель только один раз, а вызов целевой будет выполнять ее при каждом вызове). Но я согласен - это nitpicking :) –

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