問題

私はいくつかのファイルを含むItemGroupを持っています(そして、私はこのリストがどのように生成されるかを制御できません):

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

****.Tests.dllに一致するファイル名のみを保持する2番目のItemGroup(最初のものに基づいて)を作成したいと思います。つまり、FilteredFilesは次のようになります。Assembly1.Tests.dllAssembly2.Tests.dll、...

これまで私は試した:

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

しかし、それは動作していないようです。

PS:大文字と小文字を区別しないマッチを望みますが、それは別の問題です。

  ベストアンサー

@の代わりに%を使用してアイテムバッチングを使用する必要があります。これは、アイテムを1つずつ同時にインクルードするのではなく、アイテムで1つずつ動作します。あなたは条件が正しかった、私はあなたが他のどこかで見つけたと思う。

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

  同じタグがついた質問を見る

msbuild