如何根据文件名部分过滤MsBuild中的ItemGroup?

时间:2013-10-29 11:19:38

标签: msbuild

我有ItemGroup包含一些文件(我无法控制如何生成此列表):

<ItemGroup>
    <AllFiles Include="Assembly1.dll;Assembly1.Tests.dll"/>
    <AllFiles Include="Assembly2.dll;Assembly2.Tests.dll"/>
    ...
</ItemGroup>

我想创建第二个ItemGroup(基于第一个),只保留匹配****.Tests.dll的文件名。那是FilteredFiles应该是:Assembly1.Tests.dllAssembly2.Tests.dll,...

到目前为止,我试过了:

<ItemGroup>
    <FilteredFiles Include="@(AllFiles)" Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename), '\.Tests\.dll'))"/>
</ItemGroup>

但它似乎不起作用。

PS:我也想要非大小写敏感的比赛,但这是另一个问题。

1 个答案:

答案 0 :(得分:10)

您需要使用%而不是@来使用项目批处理。这将逐项处理项目,而不是同时包含所有项目。你有条件,我认为你在其他地方找到了。

<ItemGroup>
  <FilteredFiles Include="%(AllFiles.Identity)" Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename), '\.Tests\.dll'))"/>
</ItemGroup>