首页 > 解决方案 > msbuild中的集合包含或交集?

问题描述

在下面的 MSBuild 片段中,我正在尝试创建一个 ItemGroup,其中包含所引用程序集的子集——这样如果引用了 LibA 或 LibB,则它们包含在输出项中,但如果它们没有被引用,则它们不包括在内(并且它永远不会包括指定的项目以外的任何项目)。

<ItemGroup>
    <RefSubset Include="@(ReferencePath)"
               Condition="'%(ReferencePath.Filename)' == 'LibA' OR
                          '%(ReferencePath.Filename)' == 'LibB'"/>
</ItemGroup>

这行得通,但似乎不优雅。我想做的是这样的:

<PropertyGroup>
    <RefSubsetNames>LibA;LibB</RefSubsetNames>
</PropertyGroup>

RefSubset然后以它RefSubsetNames用来执行条件的方式重写规则。

重要目标:

我已经设法实现了我想要的,但它看起来有点难看,我想知道是否有更好的解决方案?

<ItemGroup>
    <RefSubset Include="@(ReferencePath)"
               Condition="$([System.String]::Copy(';$(RefSubsetNames);').Contains(';%(ReferencePath.Filename);'))" />
</ItemGroup>

标签: c#msbuild

解决方案


推荐阅读