我怎样才能在合并的MSBuild 2 ItemGroups [英] How can I merge two ItemGroups in MSBuild
本文介绍了我怎样才能在合并的MSBuild 2 ItemGroups的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个ItemGroups:
I have two 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>
我需要在 PEG
做添加的每个项目,以编译
当且仅当该项目不AREADY在编译
。
I need to do add each of the items in PEG
to Compile
IF AND ONLY IF that item is not AREADY in Compile
.
有没有一种简单的方法来做到这一点?
Is there an easy way to do that?
我的第一次尝试是这样的:
My first attempt is something like:
<ItemGroup>
<Compile Include="%(PEG.Identity)" Condition=" '$(Compile)' != '%(PEG.Identity)' " />
</ItemGroup>
但是,这并不显而易见的原因工作。我真的不希望做一个人工抗加入的MSBuild。
But that doesn't work for obvious reasons. I don't really want to do a manual anti-join in MSBuild.
或许,使用排除
将工作?
推荐答案
好吧,我想它了。
我做错的第一件事,是用 $(编译)
,而不是 @(编译)
。
The first thing I was doing wrong, was using $(Compile)
rather than @(Compile)
.
接下来,我是在正确的轨道与排除
属性上。
Next, I was on the right track with the Exclude
property.
下面是我想出了:
<?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>
完成之后,编译
包含 A.cs; B.cs; C.cs; D.cs
根据需要。
这篇关于我怎样才能在合并的MSBuild 2 ItemGroups的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文