仅在运行递增执行的目标时如何添加项目?

时间:2019-07-20 12:19:17

标签: msbuild

假设我们有以下MSBuild项目,该项目定义了可以部分运行的目标:

<Project DefaultTargets="Foo">
  <ItemGroup>
    <MyInputs Include="**/*.json"/>
  </ItemGroup>
  <Target Name="Foo"
        Condition="'@(MyInputs)' != ''"
        Inputs="@(MyInputs)"
        Outputs="@(MyInputs->'%(FileName).cs')">
    <MyCustomTask FileToProcess="%(MyInputs.Identity)"/>
    <ItemGroup>
      <Compile Include="%(MyInputs.FileName).cs"/>
    </ItemGroup>
  </Target>
</Project>

问题是所有 个项目都包含在ProcessedFiles中;甚至由于增量构建而未运行其各自MyCustomTask的那些计算机。显然,MSBuild始终在目标内部处理ItemGroup

是否只有在运行相应的目标批次时,才可以在目标内部添加项目?我尝试使用CreateItem,因为它是一项任务,可能无法像MyCustomTask一样执行,但没有用。

1 个答案:

答案 0 :(得分:0)

我的具体问题是,当源文件已经存在时,它们在Compile项中被两次包含,这引起了警告。那时,我才知道the KeepDuplicates attribute救了我。

但是问题仍然存在。