Там в 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>
:) эти два пути не эквивалентны - DependsOn вызовет все цели перед DoStuff, а не посередине. Также он не будет иметь доступ к облачным свойствам и элементам DoStuff. Но CallTarget на противоположной стороне не является стилем MSBuild. –
Ну, но сам DoStuff - это просто пустой заглушка, поэтому они эквивалентны: оба случая приводят к сообщению/DoOtherThing/Message – stijn
В этом конкретном случае - да, но это «теория», на практике автор вопроса, вероятно, будет запускать его в более реалистичном условия, при которых эти две вещи не являются одинаковыми (более того, -дитиоматический способ будет выполнять цель только один раз, а вызов целевой будет выполнять ее при каждом вызове). Но я согласен - это nitpicking :) –