我有一个包含一些文件的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:我也想进行不区分大小写的匹配,但这是另一个问题。
最佳答案
您需要使用%而不是@使用项目批处理。这将逐项处理项目,而不是同时包含所有项目。您拥有合适的条件,我认为您在其他地方找到了。
<ItemGroup>
<FilteredFiles Include="%(AllFiles.Identity)" Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename), '\.Tests\.dll'))"/>
</ItemGroup>
关于msbuild - 如何根据文件名部分过滤MsBuild中的ItemGroup?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19656811/