在MSBuild中设置包含或相交?

时间:2019-03-21 23:20:50

标签: c# 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规则。

重要目标:

  • ReferencePath上的所有元数据必须保留在RefSubset中。
  • RefSubsetNames可以包含必须忽略的空值(;;)。
  • RefSubsetNames的每个组件都应在ReferencePath.Filename上进行精确匹配-不应允许子集匹配(因此基本的Contains检查是错误的)。

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

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

0 个答案:

没有答案