Msbuild 如何在另一个目标中间启用MSBug目标?

Msbuild 如何在另一个目标中间启用MSBug目标?,msbuild,Msbuild,我要找的是: <Target Name="DoStuff" > <Message Text="Doing stuff..." /> //run target DoOtherThing <Message Text="Doing more stuff..." /> </Target> //运行目标涂鸦 您可以使用 <Target Name="DoStuff" > <Message Text="Doing

我要找的是:

<Target Name="DoStuff" >
    <Message Text="Doing stuff..." />
    //run target DoOtherThing
    <Message Text="Doing more stuff..." />
</Target>

//运行目标涂鸦
您可以使用

<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-style。但DoStuff本身只是一个空存根,所以它们是等价的:这两种情况都会导致Message/DoOtherThing/Message在这种特殊情况下-是的,但这是“理论”,在实践中,问题作者可能会在这两种情况不相同的更现实的条件下运行它(此外,惯用的方法只会执行target一次,每次调用call target都会执行它)。但我同意,这是一个吹毛求疵的做法:)我当然可以看出这两种模式都有用处。