0

我有两个 ItemGroups:

<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>

我需要将每个项目添加PEGCompileIF AND ONLY IF 该项目不是 AREADY in Compile

有没有简单的方法可以做到这一点?

我的第一次尝试是这样的:

<ItemGroup>
  <Compile Include="%(PEG.Identity)" Condition=" '$(Compile)' != '%(PEG.Identity)' " />
</ItemGroup>

但由于明显的原因,这不起作用。我真的不想在 MSBuild 中进行手动反连接。

也许使用Exclude会起作用?

4

1 回答 1

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

于 2012-09-16T21:22:34.747 回答