2012-03-27 9 views
1

MSBuildプロジェクトでアイテムタイプFooItemを考えてみましょう。我々のようなアイテムとそのメタデータへの参照を行うことができますタスクでアイテムのメタデータを含むMSBuild微妙?

%(FooItem.BarMetadata) 

または

@(FooItem->'Metadata("BarMetadata")') 

または

@(FooItem->'%(BarMetadata)') 

は、これらの3つのアプローチの間に違いはあります私と同じように見える?明らかに変換構文(->)は一般的にはより強力ですが、私は明示的に、%演算子の使用に相当する簡単な例を示しました。

さらに、タスクバッチ処理に影響がありますか(これらの式はタスク項目内にあると仮定します)。一般に、タスクのメタデータを依然として参照しながら、メタデータによるバッチ処理を防ぐ方法があるかどうかは疑問です。

答えて

3

はありません。はありません。変換構文は、入力をセミコロンで区切られたItems配列に追加します。 %という表記法は、入力をItemGroup Elementに追加します。

次のターゲット考えてみましょう:出力が示すよう

<Target Name="TestMetadata"> 

    <ItemGroup> 
    <Files Include="File1.doc"> 
     <Description>Word Document</Description> 
    </Files> 
    <Files Include="File2.xls"> 
     <Description>Excel Document</Description> 
    </Files> 
    <Files Include="File3.pps"> 
     <Description>PowerPoint Presentation</Description> 
    </Files> 
    </ItemGroup> 

    <Message Text="Transform: @(Files->'%(FullPath) is %(Description)')" /> 
    <Message Text="Direct: %(Files.FullPath) is %(Files.Description)" /> 

</Target> 

を、それらの表記が異なる出力を生成:

TestMetadata: 
Transform: C:\MSBuild\File1.doc is Word Document;C:\MSBuild\File2.xls is Excel Document;C:\\MSBuild\File3.pps is PowerPoint Presentation 
Direct: C:\MSBuild\File1.doc is Word Document 
Direct: C:\MSBuild\File2.xls is Excel Document 
Direct: C:\MSBuild\File3.pps is PowerPoint Presentation
+0

だから、基本的にあなたが言っているものは、構文を変換することです( ' - >' )はバッチ処理を行いませんが、 '%'は...そうですね。 – Noldorin

+0

いいえ。バッチ処理にはどちらも使用できます。単純なフォーマットされていない文字列の配列が必要なときは ' - >'を使います。 – KMoraz

+0

しかし明らかに、最初のケースでは*バッチ処理が行われ、2番目のケースではバッチ処理されません。それを説明してください。 – Noldorin

関連する問題