Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Code in Vorgängen und Zielen kann Elementfunktionen aufrufen, um Informationen zu den Elementen im Projekt (in MSBuild 4.0 und höher) abzurufen. Diese Funktionen vereinfachen das Abrufen unterschiedlicher Elemente und sind schneller als das Durchlaufen der Elemente.
String-Funktionen für Elemente
Sie können Zeichenfolgenmethoden und -eigenschaften im .NET Framework verwenden, um auf einem beliebigen Elementwert zu arbeiten. Geben Sie für String Methoden den Methodennamen an. String Geben Sie für Eigenschaften den Eigenschaftennamen nach "get_" an.
Bei Elementen mit mehreren Zeichenfolgen wird die Zeichenfolgenmethode oder -eigenschaft für jede Zeichenfolge ausgeführt.
Das folgende Beispiel zeigt, wie diese Zeichenfolgenelementfunktionen verwendet werden.
<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
-->
Intrinsische Elementfunktionen
In der folgenden Tabelle sind die systeminternen Funktionen aufgeführt, die für Elemente verfügbar sind.
| Funktion | Example | Description |
|---|---|---|
Combine |
@(MyItems->Combine('path')) |
Gibt einen neuen Satz von Elementen zurück, deren relativer Pfad an alle Eingabeelemente angefügt ist. |
Count |
@(MyItems->Count()) |
Gibt die Anzahl der Elemente zurück. |
DirectoryName |
@(MyItems->DirectoryName()) |
Gibt das Äquivalent von Path.DirectoryName für jedes Element zurück. |
Distinct |
@(MyItems->Distinct()) |
Gibt Elemente zurück, die unterschiedliche Include Werte aufweisen. Metadaten werden ignoriert. Bei dem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. |
DistinctWithCase |
@(MyItems->DistinctWithCase()) |
Gibt Elemente zurück, die unterschiedliche itemspec Werte aufweisen. Metadaten werden ignoriert. Bei dem Vergleich wird die Groß-/Kleinschreibung beachtet. |
Exists |
@(MyItems->Exists()) |
Filtert einen Satz von Elementen auf diejenigen, die tatsächlich auf dem Datenträger vorhanden sind. |
GetPathsOfAllDirectoriesAbove |
@(MyItems->GetPathsOfAllFilesAbove()) |
Bei einer Reihe von Elementen werden Elemente zurückgegeben, die alle Vorgängerverzeichnisse darstellen. Es ist keine Bestellung garantiert. |
Reverse |
@(MyItems->Reverse()) |
Gibt die Elemente in umgekehrter Reihenfolge zurück. |
AnyHaveMetadataValue |
@(MyItems->AnyHaveMetadataValue('MetadataName', 'MetadataValue')) |
Gibt einen boolean Wert zurück, der angibt, ob ein Element den angegebenen Metadatennamen und -wert aufweist. Bei dem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. |
ClearMetadata |
@(MyItems->ClearMetadata()) |
Gibt Elemente zurück, deren Metadaten gelöscht wurden. Nur die itemspec wird beibehalten. |
HasMetadata |
@(MyItems->HasMetadata('MetadataName')) |
Gibt Elemente zurück, die den angegebenen Metadatennamen aufweisen. Bei dem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. |
Metadata |
@(MyItems->Metadata('MetadataName')) |
Gibt die Werte der Metadaten zurück, die den Metadatennamen aufweisen. Die zurückgegebenen Elemente weisen dieselben Metadaten wie die Quellwerte auf. |
WithMetadataValue |
@(MyItems->WithMetadataValue('MetadataName', 'MetadataValue')) |
Gibt Elemente zurück, die den angegebenen Metadatennamen und -wert aufweisen. Bei dem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. |
WithoutMetadataValue |
@(MyItems->WithoutMetadataValue('MetadataName', 'MetadataValue')) |
(MSBuild 17.8 und höher) Gibt Elemente zurück, die nicht über den angegebenen Metadatenwert verfügen. Bei dem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. |
Hinweis
Exists kann auch in anderen Kontexten verwendet werden; in MSBuild-Bedingungen, z. B Condition="Exists('path')". in Statischen Eigenschaftsfunktionen, z. B $([System.IO.File]::Exists("path")). . .
Das folgende Beispiel zeigt, wie systeminterne Elementfunktionen verwendet werden.
<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
-->
Aufrufen einer String-Methode
Wenn eine Elementfunktion nicht verfügbar ist, die Ihrem Szenario entspricht, können Sie einen ähnlichen Effekt erzielen, indem Sie mithilfe der new Eigenschaftsfunktion ein Zeichenfolgenobjekt aus den Metadaten erstellen und eine beliebige String Methode aufrufen. Der folgende Code verwendet beispielsweise eine Teilzeichenfolgensuche, um eine Elementliste in einem Ziel zu filtern.
<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>
Erkennen von Duplikaten bei Verwendung der Metadatenelementfunktion
Die Metadata Elementfunktion behält die ursprünglichen Metadaten der Quellelemente bei. Dies hat einige Auswirkungen, wenn Sie überlegen, ob die zurückgegebenen Elemente Duplikate sind oder nicht. Um zu steuern, wie doppelte Elemente behandelt werden, können Sie das Attribut KeepDuplicates verwenden. Sie können die Metadaten auch entfernen, wenn sie nicht benötigt wird, indem Sie "RemoveMetadata" hinzufügen. In diesem Fall werden nur die Werte selbst berücksichtigt, wenn Duplikate erkannt werden.
<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>
Die Ausgabe lautet wie folgt:
MetadataToItem:
AllSomeItems is 1;2;3;3;4;5
Die folgende Änderung am Code führt dazu, dass der doppelte Elementwert erfolgreich erkannt und entfernt wird:
<ItemGroup>
<AllSomeItems Include="@(Sample->Metadata('SomeItems'))" KeepDuplicates="false" RemoveMetadata="SomeItems" />
</ItemGroup>
MSBuild-Bedingungsfunktionen
Die Funktion HasTrailingSlash ist keine Elementfunktion. Sie ist für die Verwendung mit dem Condition Attribut verfügbar. Siehe MSBuild-Bedingungen.
Verwandte Inhalte
Sie können attribute auch verwenden, um Vorgänge in Elementlisten auszuführen, z. B. filtern nach Elementmetadaten. Weitere Informationen finden Sie unter Elemente.