假设我们有以下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
一样执行,但没有用。
答案 0 :(得分:0)
我的具体问题是,当源文件已经存在时,它们在Compile
项中被两次包含,这引起了警告。那时,我才知道the KeepDuplicates
attribute救了我。
但是问题仍然存在。