如何递归执行MSBuild目标?

如何递归执行MSBuild目标?,msbuild,Msbuild,我试图执行以下目标,但最终导致循环依赖性错误。在目标递归中,我确实有一个停止条件$(值)>0: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> <Target Name="Recursive" Condition="$(Value) > 0"> <PropertyGroup> <Value

我试图执行以下目标,但最终导致
循环依赖性
错误。在目标
递归
中,我确实有一个停止条件
$(值)>0

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  <Target Name="Recursive" Condition="$(Value) > 0">
    <PropertyGroup>
      <Value>$([MSBuild]::Subtract($(Value), 1))</Value>
    </PropertyGroup>
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="Display" />
  </Target>

  <Target Name="Display">
    <Message Text="Value: $(Value)" />
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="Recursive" />
  </Target>

  <PropertyGroup>
    <Value>10</Value>
  </PropertyGroup>

  <Target Name="Build">
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="Display" />
  </Target>
</Project>

$([MSBuild]::减去($(值),1))
10

您的停止条件很好,但您忘记将重新计算的
属性传递到下一个递归中。将您的
递归
目标更改如下:

<Target Name="Recursive" Condition="$(Value) > 0">
  <PropertyGroup>
    <Value>$([MSBuild]::Subtract($(Value), 1))</Value>
  </PropertyGroup>
  <MSBuild Projects="$(MSBuildProjectFile)" Targets="Display"
           Properties="Value=$(Value)" />
</Target>

$([MSBuild]::减去($(值),1))

Wow。非常感谢你。