Msbuild 两次调用subtarget会导致跳过此目标。如何预防?

Msbuild 两次调用subtarget会导致跳过此目标。如何预防?,msbuild,Msbuild,我使用MSBuild运行一些管理脚本,因此这里不涉及编译器或链接器,我注意到生成系统跳过了在目标中成功运行的目标 如何强制每次运行一个目标 样本: <Project ToolsVersion="4.0" DefaultTargets="Foo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="Foo" > <CallTarget Targe

我使用MSBuild运行一些管理脚本,因此这里不涉及编译器或链接器,我注意到生成系统跳过了在目标中成功运行的目标

如何强制每次运行一个目标

样本:

<Project ToolsVersion="4.0" DefaultTargets="Foo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <Target Name="Foo" >
        <CallTarget Targets="Bar" />
        <CallTarget Targets="Bar" />
    </Target>

    <Target Name="Bar" >
         <Message Text="Bar" />
    </Target>
</Project>   
导致

Bar:
  Bar
所以它没有被调用两次,/v:d说第二次调用被跳过了,但不清楚如何在不创建目标Bar1和Bar2的情况下避免这种情况

有没有办法在Foo中执行两次目标条


围绕cl.exe、xcopy等进行搜索,未检测到任何更改,但这是仅MSBuild

标记集在生成中仅调用一次,除非发生更改,因此如果希望多次调用同一目标,则必须通过更改属性来欺骗MSBuild。可以这样做:

<Target Name="Foo" >
  <MSBuild Projects="$(MsBuildThisFile)" Targets="Bar" Properties="Dummy=1" />
  <MSBuild Projects="$(MsBuildThisFile)" Targets="Bar" Properties="Dummy=2" />
</Target>

<Target Name="Bar" >
  <Message Text="Bar" />
</Target>

然而,正如“技巧”所表明的:几乎总是有一种更为“MsBuild”的方法来完成这项工作,通常是对项目组进行批处理,因此,如果您使问题更具体,可能还会有更好的答案。

好吧,我想这是一个重复:
<Target Name="Foo" >
  <MSBuild Projects="$(MsBuildThisFile)" Targets="Bar" Properties="Dummy=1" />
  <MSBuild Projects="$(MsBuildThisFile)" Targets="Bar" Properties="Dummy=2" />
</Target>

<Target Name="Bar" >
  <Message Text="Bar" />
</Target>