項目用の関数Item Functions

MSBuild 4.0 以降、タスクとターゲットのコードは項目用の関数を呼び出し、プロジェクトの項目に関する情報を取得できます。Starting with MSBuild 4.0, code in tasks and targets can call item functions to get information about the items in the project. これらの関数により、Distinct() 項目の取得が簡素化され、項目をループ処理するよりも処理が速くなります。These functions simplify getting Distinct() items and are faster than looping through the items.

文字列項目関数String Item Functions

.NET Framework の String メソッドと String プロパティを利用し、あらゆる項目値を操作できます。You can use string methods and properties in the .NET Framework to operate on any item value. <xref:System.String> メソッドの場合、メソッド名を指定します。For <xref:System.String> methods, specify the method name. <xref:System.String> プロパティの場合、"get_" の後にプロパティ名を指定します。For <xref:System.String> properties, specify the property name after "get_".

項目に複数の文字列が含まれる場合、String メソッドまたはプロパティは各文字列で実行されます。For items that have multiple strings, the string method or property runs on each string.

次は、これらの文字列項目関数の使用方法を示す例です。The following example shows how to use these string item functions.

<ItemGroup>  
    <theItem Include="andromeda;tadpole;cartwheel" />  
</ItemGroup>  

<Target Name = "go">  
    <Message Text="IndexOf  @(theItem->IndexOf('r'))" />  
    <Message Text="Replace  @(theItem->Replace('tadpole', 'pinwheel'))" />  
    <Message Text="Length   @(theItem->get_Length())" />  
    <Message Text="Chars    @(theItem->get_Chars(2))" />  
</Target>  

  <!--  
  Output:  
    IndexOf  3;-1;2  
    Replace  andromeda;pinwheel;cartwheel  
    Length   9;7;9  
    Chars    d;d;r  
  -->  

組み込み項目関数Intrinsic Item Functions

下の表は、項目に利用できる組み込み関数をまとめたものです。The table below lists the intrinsic functions available for items.

関数Function Example 説明Description
Count @(MyItem->Count()) 項目の数を返します。Returns the count of the items.
DirectoryName @(MyItem->DirectoryName()) 項目ごとに Path.DirectoryName の等価を返します。Returns the equivalent of Path.DirectoryName for each item.
Distinct @(MyItem->Distinct()) 別個の Include 値を含む項目を返します。Returns items that have distinct Include values. メタデータは無視されます。Metadata is ignored. 比較では、大文字と小文字が区別されません。The comparison is case insensitive.
DistinctWithCase @(MyItem->DistinctWithCase()) 別個の itemspec 値を含む項目を返します。Returns items that have distinct itemspec values. メタデータは無視されます。Metadata is ignored. 比較では、大文字と小文字を区別します。The comparison is case sensitive.
Reverse @(MyItem->Reverse()) 項目を逆の順序で返します。Returns the items in reverse order.
AnyHaveMetadataValue @(MyItem->AnyHaveMetadataValue("MetadataName", "MetadataValue")) 特定のメタデータの名前と値が項目に含まれているかどうかを示す boolean を返します。Returns a boolean to indicate whether any item has the given metadata name and value. 比較では、大文字と小文字が区別されません。The comparison is case insensitive.
ClearMetadata @(MyItem->ClearMetadata()) メタデータを消して項目を返します。Returns items with their metadata cleared. itemspec のみが保持されます。Only the itemspec is retained.
HasMetadata @(MyItem->HasMetadata("MetadataName")) 特定のメタデータ名を含む項目を返します。Returns items that have the given metadata name. 比較では、大文字と小文字が区別されません。The comparison is case insensitive.
Metadata @(MyItem->Metadata("MetadataName")) メタデータ名が含まれるメタデータの値を返します。Returns the values of the metadata that have the metadata name.
WithMetadataValue @(MyItem->WithMetadataValue("MetadataName", "MetadataValue")) 特定のメタデータの名前と値を含む項目を返します。Returns items that have the given metadata name and value. 比較では、大文字と小文字が区別されません。The comparison is case insensitive.

次は、組み込み項目関数の使用方法を示す例です。The following example shows how to use intrinsic item functions.

<ItemGroup>  
    <TheItem Include="first">  
        <Plant>geranium</Plant>  
    </TheItem>  
    <TheItem Include="second">  
        <Plant>algae</Plant>  
    </TheItem>  
    <TheItem Include="third">  
        <Plant>geranium</Plant>  
    </TheItem>  
</ItemGroup>  

<Target Name="go">  
    <Message Text="MetaData:    @(TheItem->Metadata('Plant'))" />  
    <Message Text="HasMetadata: @(theItem->HasMetadata('Plant'))" />  
    <Message Text="WithMetadataValue: @(TheItem->WithMetadataValue('Plant', 'geranium'))" />  
    <Message Text=" " />  
    <Message Text="Count:   @(theItem->Count())" />  
    <Message Text="Reverse: @(theItem->Reverse())" />  
</Target>  

  <!--   
  Output:  
    MetaData:    geranium;algae;geranium  
    HasMetadata: first;second;third  
    WithMetadataValue: first;third  

    Count:   3  
    Reverse: third;second;first  
  -->  

参照See Also

項目Items