2016-06-16 5 views
2

セミコロンで区切られた文字列のリストを渡したいと思います。
各文字列はファイル名を表します。私は現在のフォルダのファイルと一致を反復処理するにはどうすればよいmsbuildプロパティグループからアイテムグループを作成

<ItemGroup> 
    <ReleaseFiles Include="$(PathToOutput)\**\*.*" Exclude="%(identity)-> identity.contains(%FileNames)"/> 
</ItemGroup> 

<PropertyGroup> 
      <FileNames>Newtonsoft.Json;Reactive</FileNames> 
      <PathToOutput>C:/</PathToOutput> 
    </PropertyGroup> 

は今、私は、私のファイル名のリストを除く特定のフォルダ内のすべてのファイルを与えるべき項目のグループを作成するような何かをしたいですFilenames変数に1つのファイル名が含まれていると、それぞれの名前が付けられます。

答えて

1

はかなり確信してこれが重複しているが、私はそれが行くので、ここで、現時点ではそれを見つけることができません。アイテムにセミコロンで区切ってプロパティを回し

  • のみInclude=$(Property)
  • Excludeを使用するだけです正確な一致のリストがあるが、ここでより任意のフィルタリングが必要な場合は、Condition
  • という2つのItemGroupsを、ReleaseFilesアイテムのそれらのFileNamesメタデータを作成して一緒に結合する必要があります。次に、ReleaseFilesの各アイテムを繰り返し処理し、同時にFileNamesにアクセスすることができます
  • Containsはプロパティ関数(WellまたはSystem :: Stringメソッド)であり、メタデータでは機能しません。コードでは最初

文字列にメタデータを回す:

<PropertyGroup> 
    <FileNames>Newtonsoft.Json;Reactive</FileNames> 
    <PathToOutput>C:/</PathToOutput> 
</PropertyGroup> 

<Target Name="FilterBasedCommaSeperatedProperty"> 
    <ItemGroup> 
    <!-- property -> item --> 
    <Excl Include="$(FileNames)"/> 
    <!-- list all and add metadata list --> 
    <AllReleaseFiles Include="$(PathToOutput)\**\*.*"> 
     <Excl>%(Excl.Identity)</Excl> 
    </AllReleaseFiles > 
    <!-- filter to get list of files we don't want --> 
    <FilesToExclude Include="@(AllReleaseFiles)" 
        Condition="$([System.String]::Copy('%(FileName)').Contains('%(Excl)'))"/> 
    <!-- all but the ones to exclude --> 
    <ReleaseFiles Include="@(AllReleaseFiles)" Exclude="@(FilesToExclude)"/> 
    </ItemGroup> 
    <Message Text="%(ReleaseFiles.Identity)" /> 
</Target> 
+0

あなたは「セミコロンを分離」の書き込みを意味ではなく、「カンマ区切り」でしたか? –

+0

@ DanMalcolmはそれを修正しました、ありがとう – stijn

0

は除外属性を使用し、他の項目グループを参照することにより、項目グループからのファイルのファイルを除外するために標準的な方法を使用してください。それははるかに理解しやすくなります。

例:

<PropertyGroup> 
    <PathToOutput>C:/</PathToOutput> 
</PropertyGroup> 

<ItemGroup> 
    <FilesToExclude Include="$(PathToOutput)\**\Newtonsoft.Json" /> 
    <FilesToExclude Include="$(PathToOutput)\**\Reactive" /> 
    <ReleaseFiles Include="$(PathToOutput)\**\*.*" Exclude="@(FilesToExclude)"/> 
</ItemGroup> 
関連する問題