9

我有一个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:我也想要不区分大小写的匹配,但这是另一个问题。

4

1 回答 1

11

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

<ItemGroup>
  <FilteredFiles Include="%(AllFiles.Identity)" Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename), '\.Tests\.dll'))"/>
</ItemGroup>
于 2013-10-29T13:14:34.520 回答