2013-10-29 16 views
6

私はいくつかのファイルが含まれているItemGroupを持っている(そして、私はこのリストが生成される方法にはコントロールがありません):ファイル名部分に基づいてMsBuildのItemGroupをフィルタリングする方法は?

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

をそして私が作成したい秒だけのために保持する(最初の1に基づく)ItemGroupファイル名は****.Tests.dllと一致します。 Assembly1.Tests.dllAssembly2.Tests.dllは、...

は、これまでのところ、私が試した:

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

しかし、それは動作するようには思えないそれはFilteredFilesがあるべきです。

PS:大文字と小文字は区別されませんが、別の問題です。

+0

[OK]を、私のミスは、私は '@'デバッグMSBuildのスクリプトへの簡単な方法のためのドリーミング私自身のスクリプトの 'Include'属性... ... – CitizenInsane

+1

することができますオブジェクト指向で経由するために忘れていました隠された特徴。しかしVS 2012で有効になっているかどうかはわかりません。 http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx –

答えて

10

@の代わりに%を使用してアイテムのバッチ処理を行う必要があります。これは、同時にすべてを含めるのではなく、1つずつ項目に作用します。あなたは条件の権利を持っていました。

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

'Include ="(AllFiles) "'を 'Include = "@(AllFiles)" 'は状況に十分にきれいだった...とにかく、アイテムのバッチ処理に関してあなたが言ったことについてのスクリプトを見直す。ご協力ありがとうございました :) – CitizenInsane

関連する問題