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

Cit*_*ane 7 msbuild

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

<ItemGroup>
    <AllFiles Include="Assembly1.dll;Assembly1.Tests.dll"/>
    <AllFiles Include="Assembly2.dll;Assembly2.Tests.dll"/>
    ...
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我想创建第二个ItemGroup(基于第一个)仅持有文件名匹配****.Tests.dll.这是FilteredFiles应为:Assembly1.Tests.dll,Assembly2.Tests.dll,...

到目前为止我试过:

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

但它似乎没有用.

PS:我也想要非案例敏感的比赛,但这是另一个问题.

小智 10

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

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