我有ItemGroup
包含一些文件(我无法控制如何生成此列表):
<ItemGroup>
<AllFiles Include="Assembly1.dll;Assembly1.Tests.dll"/>
<AllFiles Include="Assembly2.dll;Assembly2.Tests.dll"/>
...
</ItemGroup>
我想创建第二个ItemGroup
(基于第一个),只保留匹配****.Tests.dll
的文件名。那是FilteredFiles
应该是:Assembly1.Tests.dll
,Assembly2.Tests.dll
,...
到目前为止,我试过了:
<ItemGroup>
<FilteredFiles Include="@(AllFiles)" Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename), '\.Tests\.dll'))"/>
</ItemGroup>
但它似乎不起作用。
PS:我也想要非大小写敏感的比赛,但这是另一个问题。
答案 0 :(得分:10)
您需要使用%而不是@来使用项目批处理。这将逐项处理项目,而不是同时包含所有项目。你有条件,我认为你在其他地方找到了。
<ItemGroup>
<FilteredFiles Include="%(AllFiles.Identity)" Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename), '\.Tests\.dll'))"/>
</ItemGroup>