我有两个ItemGroup:
<ItemGroup>
<Compile Include="A.cs" />
<Compile Include="B.cs" />
<Compile Include="C.cs" />
</ItemGroup>
<ItemGroup>
<PEG Include="A.cs" />
<PEG Include="Y.cs" />
<PEG Include="Z.cs" />
</ItemGroup>
我需要将PEG
中的每个项目添加到Compile
IF,并且仅在Compile
中该项目不是AREADY。
有一种简单的方法吗?
我的第一次尝试是这样的:
<ItemGroup>
<Compile Include="%(PEG.Identity)" Condition=" '$(Compile)' != '%(PEG.Identity)' " />
</ItemGroup>
但是,由于显而易见的原因,这并不起作用。我真的不想在MSBuild中进行手动反加入。
也许使用Exclude
会有用吗?
答案 0 :(得分:2)
好吧,我明白了。
我做错的第一件事是使用$(Compile)
而不是@(Compile)
。
接下来,我在Exclude
属性的正确轨道上。
以下是我的想法:
<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Compile">
<ItemGroup>
<Compile Include="A.cs" />
<Compile Include="B.cs" />
<Compile Include="C.cs" />
</ItemGroup>
<Target Name="Compile">
<ItemGroup>
<PEG Include="A" />
<PEG Include="D" />
</ItemGroup>
<Message Text="Compile = @(Compile)" />
<Message Text="PEG = @(PEG)" />
<ItemGroup>
<Compile Include="%(PEG.Identity).cs" Exclude="@(Compile)" />
</ItemGroup>
<Message Text="Compile = @(Compile)" />
</Target>
</Project>
完成此操作后,Compile
会根据需要包含A.cs;B.cs;C.cs;D.cs
。