Öğe işlevleriyle çalışma

Görevler ve hedeflerdeki kodlar, projedeki öğeler hakkında bilgi almak için öğe işlevlerini çağırabilir (MSBuild 4.0 ve sonraki sürümlerde). Bu işlevler farklı öğeler almayı basitleştirir ve öğeler arasında döngüye girmekten daha hızlıdır.

Dize öğesi işlevleri

Herhangi bir öğe değeri üzerinde çalışmak için .NET Framework'teki dize yöntemlerini ve özelliklerini kullanabilirsiniz. Yöntemler için String yöntem adını belirtin. Özellikler için String " get_" sonra özellik adını belirtin.

Birden çok dizeye sahip öğeler için dize yöntemi veya özelliği her dizede çalışır.

Aşağıdaki örnekte bu dize öğesi işlevlerinin nasıl kullanılacağı gösterilmektedir.

<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
  -->

İç öğe işlevleri

Aşağıdaki tabloda öğeler için kullanılabilen iç işlevler listelenmiştir.

İşlev Örnek Açıklama
Combine @(MyItems->Combine('path')) Tüm giriş öğelerinin sonuna belirli bir göreli yol eklenmiş yeni bir öğe kümesi döndürür.
Count @(MyItems->Count()) Öğelerin sayısını döndürür.
DirectoryName @(MyItems->DirectoryName()) Her öğe için eşdeğerini Path.DirectoryName döndürür.
Distinct @(MyItems->Distinct()) Ayrı Include değerlere sahip öğeleri döndürür. Meta veriler yoksayılır. Karşılaştırma büyük/küçük harfe duyarlı değildir.
DistinctWithCase @(MyItems->DistinctWithCase()) Ayrı itemspec değerlere sahip öğeleri döndürür. Meta veriler yoksayılır. Karşılaştırma büyük/küçük harfe duyarlıdır.
Exists @(MyItems->Exists()) Bir dizi öğeyi diskte var olan öğelere filtreler.
GetPathsOfAllDirectoriesAbove @(MyItems->GetPathsOfAllFilesAbove()) Bir öğe kümesi verüldüğünde, tüm üst dizinleri temsil eden öğeleri döndürür. Hiçbir sipariş garanti değildir.
Reverse @(MyItems->Reverse()) Öğeleri ters sırada döndürür.
AnyHaveMetadataValue @(MyItems->AnyHaveMetadataValue("MetadataName", "MetadataValue")) Herhangi bir öğenin verilen meta veri adına ve değerine sahip olup olmadığını belirtmek için bir boolean döndürür. Karşılaştırma büyük/küçük harfe duyarlı değildir.
ClearMetadata @(MyItems->ClearMetadata()) Meta verileri temizlenmiş öğeleri döndürür. Yalnızca öğesini itemspec korur.
HasMetadata @(MyItems->HasMetadata("MetadataName")) Verilen meta veri adına sahip öğeleri döndürür. Karşılaştırma büyük/küçük harfe duyarlı değildir.
Metadata @(MyItems->Metadata("MetadataName")) Meta veri adına sahip meta verilerin değerlerini döndürür. Döndürülen öğeler, kaynak değerlerle aynı meta veriye sahiptir.
WithMetadataValue @(MyItems->WithMetadataValue("MetadataName", "MetadataValue")) Verilen meta veri adına ve değerine sahip öğeleri döndürür. Karşılaştırma büyük/küçük harfe duyarlı değildir.

Not

Existsdiğer bağlamlarda da kullanılabilir; örneğin, MSBuild koşullarında Condition="Exists('path')"veya Statik özellik işlevlerinde, örneğin $([System.IO.File]::Exists("path")).

Aşağıdaki örnekte iç öğe işlevlerinin nasıl kullanılacağı gösterilmektedir.

<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
  -->

Meta Veri öğesi işlevini kullanırken yinelenenleri algılama

Metadata item işlevi, kaynak öğelerin özgün meta verilerini korur. Döndürülen öğelerin yinelenen olup olmadığı dikkate alınırken bunun bazı etkileri vardır. Yinelenen öğelerin nasıl işleneceğini denetlemek için KeepDuplicates özniteliğini kullanabilirsiniz. Ayrıca, gerekli değilse RemoveMetadata'yı ekleyerek meta verileri kaldırabilirsiniz. Bu durumda yinelenenleri algılarken yalnızca değerlerin kendileri dikkate alınır.

  <Target Name="MetadataToItem">
    <ItemGroup>
      <Sample Include="AAA" SomeItems="1;2;3" />
      <Sample Include="BBB" SomeItems="3;4;5" />
    </ItemGroup>

    <ItemGroup>
      <AllSomeItems Include="@(Sample->Metadata('SomeItems'))" KeepDuplicates="false" />
    </ItemGroup>
    <Message Text="AllSomeItems is @(AllSomeItems)" />
  </Target>

Çıktı aşağıdaki şekilde olacaktır:

MetadataToItem:
  AllSomeItems is 1;2;3;3;4;5

Kodda yapılan aşağıdaki değişiklik, yinelenen öğe değerinin başarıyla algılanıp kaldırılmasına neden olur:

    <ItemGroup>
      <AllSomeItems Include="@(Sample->Metadata('SomeItems'))" KeepDuplicates="false" RemoveMetadata="SomeItems" />
    </ItemGroup>

MSBuild koşul işlevleri

İşlev HasTrailingSlash bir öğe işlevi değildir. özniteliğiyle Condition birlikte kullanılabilir. Bkz. MSBuild koşulları.

Öğe listelerinde öğe meta verilerini filtreleme gibi işlemler gerçekleştirmek için öznitelikleri de kullanabilirsiniz. Daha fazla bilgi için bkz . Öğeler.