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.
Kapcsolódó tartalom
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.