Megosztás a következőn keresztül:


Elemfüggvényekkel való munka

A tevékenységekben és célokban szereplő kód meghívhatja az elemfüggvényeket a projekt elemeire vonatkozó információk lekéréséhez (az MSBuild 4.0-s és újabb verzióiban). Ezek a függvények egyszerűbbé teszik az egyedi elemek lekérését, és gyorsabbak, mint az elemek végigiterálása.

Sztringelem-függvények

A .NET-keretrendszerben karakterlánc-metódusok és tulajdonságok használatával műveleteket végezhet bármilyen elemértéken. String metódusok esetében adja meg a metódus nevét. String tulajdonságoknál adja meg a tulajdonság nevét a "get_" után.

Több sztringet tartalmazó elemek esetén a sztring metódusa vagy tulajdonsága minden sztringen fut.

Az alábbi példa bemutatja, hogyan használhatja ezeket a szövegfüggvényeket.

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

Belső elemek funkciói

Az alábbi táblázat az elemekhez elérhető belső függvényeket sorolja fel.

Funkció Példa Leírás
Combine @(MyItems->Combine('path')) Az összes bemeneti elemhez hozzáfűzött relatív elérési úttal rendelkező új elemkészletet ad vissza.
Count @(MyItems->Count()) Az elemek számát adja vissza.
DirectoryName @(MyItems->DirectoryName()) Az egyes elemek Path.DirectoryName megfelelő értékét adja vissza.
Distinct @(MyItems->Distinct()) Különböző Include értékekkel rendelkező elemeket ad vissza. A metaadatok figyelmen kívül lesznek hagyva. Az összehasonlítás kis- és nagybetűkre érzéketlen.
DistinctWithCase @(MyItems->DistinctWithCase()) Különböző itemspec értékekkel rendelkező elemeket ad vissza. A metaadatok figyelmen kívül lesznek hagyva. Az összehasonlítás megkülönbözteti a kis- és nagybetűkét.
Exists @(MyItems->Exists()) Az elemek egy készletét szűri a lemezen ténylegesen létező elemekre.
GetPathsOfAllDirectoriesAbove @(MyItems->GetPathsOfAllFilesAbove()) Az elemek egy halmaza esetén az összes elődkönyvtárat képviselő elemeket adja vissza. A rendelés nem garantált.
Reverse @(MyItems->Reverse()) Fordított sorrendben adja vissza az elemeket.
AnyHaveMetadataValue @(MyItems->AnyHaveMetadataValue("MetadataName", "MetadataValue")) Egy boolean ad vissza, amely jelzi, hogy egy elem rendelkezik-e a megadott metaadatok nevével és értékével. Az összehasonlítás nem tesz különbséget a kis- és nagybetűk között.
ClearMetadata @(MyItems->ClearMetadata()) Az elemeket úgy adja vissza, hogy a metaadatok törölve vannak. Csak a itemspec marad meg.
HasMetadata @(MyItems->HasMetadata("MetadataName")) A megadott metaadat-névvel rendelkező elemeket adja vissza. Az összehasonlítás nem tesz különbséget a kis- és nagybetűk között.
Metadata @(MyItems->Metadata("MetadataName")) A metaadatok nevét tartalmazó metaadatok értékeit adja vissza. A visszaadott elemek metaadatai megegyeznek a forrásértékekkel.
WithMetadataValue @(MyItems->WithMetadataValue("MetadataName", "MetadataValue")) A megadott metaadat-névvel és értékkel rendelkező elemeket adja vissza. Az összehasonlítás nem tesz különbséget a kis- és nagybetűk között.

Jegyzet

Exists más környezetekben is használható; MSBuild feltételek, például Condition="Exists('path')"; vagy Statikus tulajdonságfüggvények, például $([System.IO.File]::Exists("path")).

Az alábbi példa a belső elemfüggvények használatát mutatja be.

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

Sztring metódus meghívása

Ha nem érhető el olyan elemfüggvény, amely megfelel a forgatókönyvnek, hasonló hatást érhet el, ha a metaadatokból létrehoz egy sztringobjektumot a new tulajdonságfüggvény használatával, és meghívja rajta a String metódust. Az alábbi kód például egy részszűrési kereséssel szűr egy elemlistát egy célban.

<Project>
  <PropertyGroup>
    <SearchString>abc</SearchString>
  </PropertyGroup>

  <ItemGroup>
    <UnfilteredList Include="abcdef;abc;def;xyz"></UnfilteredList>
  </ItemGroup>

  <Target Name="FilterItemList">

    <ItemGroup>
      <FilteredList Include="@(UnfilteredList)" Condition="$([System.String]::new('%(UnfilteredList.Identity)').Contains($(SearchString)))"></FilteredList>
    </ItemGroup>

    <Message Text="Result: @(FilteredList)"/>
  </Target>
</Project>

Duplikált elemek észlelése a Metadata elemfüggvény használatakor

A Metadata elemfüggvény megőrzi a forráselemek eredeti metaadatait. Ennek bizonyos következményei lehetnek annak mérlegelése során, hogy a visszaadott elemek duplikáltak-e vagy sem. Az ismétlődő elemek kezelésének szabályozásához használhatja a KeepDuplicates attribútumot. Ha nincs rá szükség, a metaadatokat is eltávolíthatja a RemoveMetadatahozzáadásával, amely esetben csak maguk az értékek lesznek figyelembe véve az ismétlődések észlelésekor.

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

A kimenet a következő:

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

A kód következő módosítása az ismétlődő elemérték sikeres észlelését és eltávolítását eredményezi:

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

MSBuild feltételfüggvények

A HasTrailingSlash függvény nem elemfüggvény. A Condition attribútummal használható. Lásd: MSBuild feltételek.

Attribútumokkal műveleteket is végrehajthat az elemlistákon, például az elem metaadataira szűrhet. További információért lásd a elemeket.