MSBuild-Elemente
MSBuild-Elemente sind Eingaben in das Buildsystem. In der Regel handelt es sich dabei um Dateien (die Dateien sind im Include
-Attribut angegeben). Elemente werden auf Grundlage benutzerdefinierter Elementnamen in Elementtypen gruppiert. Elementtypen sind benannte Listen von Elementen, die als Parameter für Aufgaben verwendet werden können. In den Aufgaben werden die Schritte des Buildprozesses mithilfe der Elementwerte ausgeführt.
Da Elemente anhand des Elementtyps benannt werden, zu dem sie gehören, können die Begriffe „Element“ und „Elementwert“ synonym verwendet werden.
Erstellen von Elementen in einer Projektdatei
Elemente werden in der Projektdatei als untergeordnete Elemente eines ItemGroup-Elements deklariert. Gültige Elementnamen beginnen mit einem Groß- oder Kleinbuchstaben oder Unterstrich (_
). Gültige nachfolgende Zeichen umfassen alphanumerische Zeichen (Buchstaben oder Ziffern), Unterstrich und Bindestrich (-
). Der Name des untergeordneten Elements ist der Typ des Elements. Durch das Include
-Attribut des Elements wird angegeben, welche Elemente (Dateien) in den jeweiligen Elementtyp aufgenommen werden sollen. Im folgenden XML wird z.B. der mit Compile
benannte Elementtyp erstellt, der zwei Dateien umfasst.
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
Das Element file2.cs ersetzt das Element file1.cs nicht. Stattdessen wird der Dateiname an die Liste der Werte für den Compile
-Elementtyp angefügt.
Das folgende XML erstellt den gleichen Elementtyp, indem beide Dateien in einem Include
-Attribut deklariert werden. Achten Sie darauf, dass die Dateinamen durch ein Semikolon voneinander getrennt sind.
<ItemGroup>
<Compile Include = "file1.cs;file2.cs"/>
</ItemGroup>
Das Include
-Attribut ist ein Pfad, der relativ zum Ordner der Projektdatei ($(MSBuildProjectPath)
) interpretiert wird. Dies gilt auch dann, wenn sich das Element in einer importierten Datei, wie etwa einer .targets
-Datei, befindet.
Erstellen von Elementen während der Ausführung
Elementen außerhalb von Ziel-Elementen werden während der Auswertungsphase eines Builds Werte zugewiesen. Während der anschließenden Ausführungsphase können Elemente wie folgt erstellt oder geändert werden:
Jede Aufgabe kann ein Element ausgeben. Das Aufgabe-Element muss über ein untergeordnetes Ausgabe-Element mit einem
ItemName
-Attribut verfügen, damit ein Element ausgegeben werden kann.Die CreateItem-Aufgabe kann ein Element ausgeben. Diese Verwendung ist veraltet.
Target
-Elemente enthalten möglicherweise ItemGroup-Elemente, die Item-Elemente enthalten können.
Verweisen auf Elemente in einer Projektdatei
Verwenden Sie die Syntax @(ItemType)
, um auf Elementtypen in der gesamten Projektdatei zu verweisen. Auf den Elementtyp aus dem vorherigen Beispiel würden Sie z.B. mithilfe von @(Compile)
verweisen. Mithilfe dieser Syntax können Sie Elemente an Aufgaben übergeben, indem Sie den Elementtyp als einen Parameter dieser Aufgabe angeben. Weitere Informationen finden Sie unter Vorgehensweise: Auswählen von Dateien für den Buildvorgang.
Standardmäßig sind die Elemente eines Elementtyps durch Semikolons (;) getrennt, wenn er erweitert wird. Sie können die Syntax @(ItemType, 'separator')
verwenden, um ein anderes Trennzeichen als das Standardtrennzeichen anzugeben. Weitere Informationen finden Sie unter Vorgehensweise: Anzeigen einer durch Trennzeichen getrennten Elementliste.
Verwenden von Platzhaltern zum Angeben von Elementen
Sie können die Platzhalterzeichen **
, *
und ?
verwenden, um eine Gruppe von Dateien als Eingaben für einen Build anzugeben. So müssen Sie nicht alle Dateien separat auflisten.
- Das Platzhalterzeichen
?
entspricht einem einzelnen Zeichen. - Das Platzhalterzeichen
*
entspricht 0 (null) oder mehr Zeichen. - Die Platzhalterzeichenfolge
**
entspricht einem partiellen Pfad.
Sie können z.B. alle .cs
-Dateien im Verzeichnis der Projektdatei angeben, indem Sie das folgende Element in der Projektdatei verwenden.
<CSFile Include="*.cs"/>
Das folgende Element wählt alle .vb
-Dateien auf Laufwerk D:
aus:
<VBFile Include="D:/**/*.vb"/>
Wenn Sie literale Zeichen *
oder ?
in ein Element ohne Platzhaltererweiterung aufnehmen möchten, müssen Sie die Platzhalterzeichen mit Escapezeichen versehen.
Weitere Informationen zu Platzhalterzeichen finden Sie unter Vorgehensweise: Auswählen von Dateien für den Buildvorgang.
Verwenden des Exclude-Attributs
Item-Elemente können das Exclude
-Attribut enthalten, das bestimmte Elemente (Dateien) aus dem Elementtyp ausschließt. Das Exclude
-Attribut wird normalerweise zusammen mit Platzhalterzeichen verwendet. Der folgende XML-Code fügt z. B. dem CSFile
-Elementtyp alle CS-Dateien außer DoNotBuild.cs hinzu, die sich im Verzeichnis befinden.
<ItemGroup>
<CSFile Include="*.cs" Exclude="DoNotBuild.cs"/>
</ItemGroup>
Das Exclude
-Attribut wirkt sich nur auf Elemente aus, die über das Include
-Attribut in dem Item-Element hinzugefügt wurden, das beide enthält. Im folgenden Beispiel würde die im vorherigen Item-Element hinzugefügte Datei Form1.cs also nicht ausgeschlossen werden.
<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">
Weitere Informationen finden Sie unter Vorgehensweise: Ausschließen von Dateien aus dem Buildvorgang.
Elementmetadaten
Zusätzlich zu den Informationen aus den Attributen Include
und Exclude
können Elemente Metadaten enthalten. Diese Metadaten können von Aufgaben verwendet werden, die weitere Informationen zu den Elementen oder zur Batchverarbeitung von Aufgaben und Zielen benötigen. Weitere Informationen finden Sie unter MSBuild Batching (Batchverarbeitung).
Bei Metadaten handelt es sich um eine Auflistung von Schlüssel-Wert-Paaren, die in der Projektdatei als untergeordnete Elemente eines Item-Elements deklariert sind. Der Name des untergeordneten Elements entspricht dem Metadatennamen, und der Wert des untergeordneten Elements entspricht dem Metadatenwert.
Die Metadaten sind dem Item-Element zugeordnet, in dem sie enthalten sind. Der folgende XML-Code fügt z. B. den Elementen one.cs und two.cs des CSFile
-Elementtyps Culture
-Metadaten mit dem Wert Fr
hinzu.
<ItemGroup>
<CSFile Include="one.cs;two.cs">
<Culture>Fr</Culture>
</CSFile>
</ItemGroup>
Ein Element kann über 0 (null) oder mehr Metadatenwerte verfügen. Metadaten lassen sich immer ändern. Wenn Sie Metadaten auf einen leeren Wert festlegen, entfernen Sie sie unwiderruflich aus dem Build.
Verweisen auf Elementmetadaten in einer Projektdatei
Mithilfe der Syntax %(ItemMetadataName)
kann in der gesamten Projektdatei auf Elementmetadaten verwiesen werden. Bei Mehrdeutigkeiten können Sie mit dem Namen des Elementtyps einen Verweis qualifizieren. Sie können z.B. %(ItemType.ItemMetaDataName)
festlegen. Im folgenden Beispiel werden Display
-Metadaten verwendet, um den Task Message
in einem Batch zusammenzufassen. Weitere Informationen zur Verwendung von Elementmetadaten für die Batchverarbeitung finden Sie unter Item Metadata in Task Batching (Elementmetadaten bei der Batchverarbeitung von Aufgaben).
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Stuff Include="One.cs" >
<Display>false</Display>
</Stuff>
<Stuff Include="Two.cs">
<Display>true</Display>
</Stuff>
</ItemGroup>
<Target Name="Batching">
<Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/>
</Target>
</Project>
Bekannte Elementmetadaten
Wenn einem Elementtypen ein Element hinzugefügt wird, werden diesem Element bekannte Metadaten zugewiesen. So verfügen z. B. alle Elemente über die bekannten Metadaten %(Filename)
, deren Wert dem Dateinamen des Elements entspricht (ohne Erweiterung). Weitere Informationen finden Sie unter Well-known Item Metadata (Bekannte Elementmetadaten).
Umwandeln von Elementtypen mithilfe von Metadaten
Elementlisten können mithilfe von Metadaten in neue Elementlisten umgewandelt werden. Sie können z.B. mit dem Ausdruck @(CppFiles -> '%(Filename).obj')
einen CppFiles
-Elementtyp, der über Elemente in Form von .cpp
-Dateien verfügt, in eine entsprechende Liste von .obj
-Dateien umwandeln.
Der folgende Code erstellt einen CultureResource
-Elementtyp, der Kopien aller EmbeddedResource
-Elemente mit Culture
-Metadaten enthält. Der Culture
-Metadatenwert ist nun der Wert der neuen Metadaten CultureResource.TargetDirectory
.
<Target Name="ProcessCultureResources">
<ItemGroup>
<CultureResource Include="@(EmbeddedResource)"
Condition="'%(EmbeddedResource.Culture)' != ''">
<TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
</CultureResource>
</ItemGroup>
</Target>
Weitere Vorgänge für Elemente finden Sie unter Elementfunktionen sowie unter MSBuild-Transformationen.
Elementdefinitionen
Sie können jedem Elementtyp mit dem ItemDefinitionGroup-Element Standardmetadaten hinzufügen. Standardmetadaten sind genau wie bekannte Metadaten allen Elementen des jeweils angegebenen Elementtyps zugeordnet. Standardmetadaten können in einer Elementdefinition explizit überschrieben werden. Der folgende XML-Code vergibt z.B. an die Compile
-Elemente one.cs und three.cs die Metadaten BuildDay
mit dem Wert „Monday“. Der Code vergibt an das Element two.cs die Metadaten BuildDay
mit dem Wert „Tuesday“.
<ItemDefinitionGroup>
<Compile>
<BuildDay>Monday</BuildDay>
</Compile>
</ItemDefinitionGroup>
<ItemGroup>
<Compile Include="one.cs;three.cs" />
<Compile Include="two.cs">
<BuildDay>Tuesday</BuildDay>
</Compile>
</ItemGroup>
Weitere Informationen finden Sie unter Item Definitions (Elementdefinitionen).
Attribute für Elemente im ItemGroup-Element eines Ziels
Target
-Elemente enthalten möglicherweise ItemGroup-Elemente, die Item-Elemente enthalten können. Die Attribute in diesem Abschnitt sind gültig, wenn sie für ein Element in einer ItemGroup
angegeben werden, die sich in einem Target
befindet.
Entfernen des Attributs
Das Remove
-Attribut entfernt bestimmte Elemente (Dateien) aus dem Elementtyp. Dieses Attribut wurde in .NET Framework 3.5 eingeführt (nur von Zielen innerhalb). Sowohl die Ziele innerhalb als auch außerhalb werden ab MSBuild 15.0 unterstützt.
Das folgende Beispiel veranschaulicht das Entfernen aller .config
-Dateien aus dem Compile
-Elementtyp.
<Target>
<ItemGroup>
<Compile Remove="*.config"/>
</ItemGroup>
</Target>
MatchOnMetadata-Attribut
Das MatchOnMetadata
-Attribut gilt nur für Remove
-Attribute, die auf andere Elemente verweisen (z. B. Remove="@(Compile);@(Content)"
). Es weist den Remove
-Vorgang an, Elemente anhand der Werte angegebener Metadatennamen und nicht anhand der Elementwerte abzugleichen.
Vergleichsregel für B Remove="@(A)" MatchOnMetadata="M"
: Hiermit werden alle Elemente aus B
entfernt, die Metadaten M
enthalten, deren Metadatenwert V
für M
einem beliebigen Element aus A
mit Metadaten M
des Werts V
entspricht.
<Project>
<ItemGroup>
<A Include='a1' M1='1' M2='a' M3="e"/>
<A Include='b1' M1='2' M2='x' M3="f"/>
<A Include='c1' M1='3' M2='y' M3="g"/>
<A Include='d1' M1='4' M2='b' M3="h"/>
<B Include='a2' M1='x' m2='c' M3="m"/>
<B Include='b2' M1='2' m2='x' M3="n"/>
<B Include='c2' M1='2' m2='x' M3="o"/>
<B Include='d2' M1='3' m2='y' M3="p"/>
<B Include='e2' M1='3' m2='Y' M3="p"/>
<B Include='f2' M1='4' M3="r"/>
<B Include='g2' M3="s"/>
<B Remove='@(A)' MatchOnMetadata='M1;M2'/>
</ItemGroup>
<Target Name="PrintEvaluation">
<Message Text="%(B.Identity) M1='%(B.M1)' M2='%(B.M2)' M3='%(B.M3)'" />
</Target>
</Project>
Im Beispiel werden die Elementwerte b2
, c2
und d2
aus folgenden Grund aus dem B
-Element entfernt:
b2
undc2
ausB
stimmen mitb1
ausA
inM1=2
undM2=x
überein.d2
ausB
stimmt mitc1
ausA
inM1=3
undM2=y
überein.
Die Message
-Aufgabe gibt folgende Daten aus:
a2 M1='x' M2='c' M3='m'
e2 M1='3' M2='Y' M3='p'
f2 M1='4' M2='' M3='r'
g2 M1='' M2='' M3='s'
Beispiel für die Verwendung von MatchOnMetadata
von MSBuild:
<_TransitiveItemsToCopyToOutputDirectory Remove="@(_ThisProjectItemsToCopyToOutputDirectory)" MatchOnMetadata="TargetPath" MatchOnMetadataOptions="PathLike" />
In dieser Zeile werden Elemente aus _TransitiveItemsToCopyToOutputDirectory
entfernt, die über dieselben TargetPath
-Metadatenwerte aus Elementen in _ThisProjectItemsToCopyToOutputDirectory
verfügen.
MatchOnMetadataOptions-Attribut
Gibt die Strategie zum Zeichenfolgenabgleich an, die von MatchOnMetadata
zum Abgleichen der Metadatenwerte zwischen Elementen verwendet wird. (Beim Abgleich von Metadatennamen ist die Groß-/Kleinschreibung nicht relevant.) Mögliche Werte sind CaseSensitive
, CaseInsensitive
oder PathLike
. Der Standardwert ist CaseSensitive
.
PathLike
wendet die pfadorientierte Normalisierung auf die Werte an. Beispielsweise werden Schrägstrichausrichtungen normalisiert, nachgestellte Schrägstriche ignoriert, .
und ..
entfernt und alle relativen Pfade als absolut für das aktuelle Verzeichnis festgelegt.
KeepMetadata-Attribut
Wenn ein Element in einem Ziel erstellt wird, enthält das Item-Element möglicherweise das KeepMetadata
-Attribut. Wenn dieses Attribut angegeben wird, werden nur die Metadaten aus dem Quellelement in das Zielelement übertragen, die in der durch Semikolons getrennten Liste von Namen angegeben sind. Wird für dieses Attribut ein leerer Wert angegeben, ist dies, als wäre nichts angegeben worden. Das KeepMetadata
-Attribut wurde in .NET Framework 4.5 eingeführt.
Das folgende Beispiel veranschaulicht, wie das KeepMetadata
-Attribut verwendet wird.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0">
<ItemGroup>
<FirstItem Include="rhinoceros">
<Class>mammal</Class>
<Size>large</Size>
</FirstItem>
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<SecondItem Include="@(FirstItem)" KeepMetadata="Class" />
</ItemGroup>
<Message Text="FirstItem: %(FirstItem.Identity)" />
<Message Text=" Class: %(FirstItem.Class)" />
<Message Text=" Size: %(FirstItem.Size)" />
<Message Text="SecondItem: %(SecondItem.Identity)" />
<Message Text=" Class: %(SecondItem.Class)" />
<Message Text=" Size: %(SecondItem.Size)" />
</Target>
</Project>
<!--
Output:
FirstItem: rhinoceros
Class: mammal
Size: large
SecondItem: rhinoceros
Class: mammal
Size:
-->
RemoveMetadata-Attribut
Wenn ein Element in einem Ziel erstellt wird, enthält das Item-Element möglicherweise das RemoveMetadata
-Attribut. Wenn dieses Attribut angegeben wird, werden alle Metadaten aus dem Quellelement in das Zielelement übertragen. Davon ausgenommen sind Metadaten, deren Namen in der durch Semikolons getrennten Liste von Namen enthalten sind. Wird für dieses Attribut ein leerer Wert angegeben, ist dies, als wäre nichts angegeben worden. Das RemoveMetadata
-Attribut wurde in .NET Framework 4.5 eingeführt.
Das folgende Beispiel veranschaulicht, wie das RemoveMetadata
-Attribut verwendet wird.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MetadataToRemove>Size;Material</MetadataToRemove>
</PropertyGroup>
<ItemGroup>
<Item1 Include="stapler">
<Size>medium</Size>
<Color>black</Color>
<Material>plastic</Material>
</Item1>
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<Item2 Include="@(Item1)" RemoveMetadata="$(MetadataToRemove)" />
</ItemGroup>
<Message Text="Item1: %(Item1.Identity)" />
<Message Text=" Size: %(Item1.Size)" />
<Message Text=" Color: %(Item1.Color)" />
<Message Text=" Material: %(Item1.Material)" />
<Message Text="Item2: %(Item2.Identity)" />
<Message Text=" Size: %(Item2.Size)" />
<Message Text=" Color: %(Item2.Color)" />
<Message Text=" Material: %(Item2.Material)" />
</Target>
</Project>
<!--
Output:
Item1: stapler
Size: medium
Color: black
Material: plastic
Item2: stapler
Size:
Color: black
Material:
-->
Weitere Vorgänge für Elemente finden Sie unter Elementfunktionen.
KeepDuplicates-Attribut
Wenn ein Element in einem Ziel erstellt wird, enthält das Item-Element möglicherweise das KeepDuplicates
-Attribut. KeepDuplicates
ist ein Boolean
-Attribut, das angibt, ob ein Element der Zielgruppe hinzugefügt werden soll, wenn es sich um ein exaktes Duplikat eines bereits vorhandenen Elements handelt.
Wenn das Quell- und Zielelement den gleichen Include
-Wert aber unterschiedliche Metadaten aufweisen, wird das Element auch dann hinzugefügt, wenn KeepDuplicates
auf false
festgelegt ist. Wird für dieses Attribut ein leerer Wert angegeben, ist dies, als wäre nichts angegeben worden. Das KeepDuplicates
-Attribut wurde in .NET Framework 4.5 eingeführt.
Das folgende Beispiel veranschaulicht, wie das KeepDuplicates
-Attribut verwendet wird.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Item1 Include="hourglass;boomerang" />
<Item2 Include="hourglass;boomerang" />
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<Item1 Include="hourglass" KeepDuplicates="false" />
<Item2 Include="hourglass" />
</ItemGroup>
<Message Text="Item1: @(Item1)" />
<Message Text=" %(Item1.Identity) Count: @(Item1->Count())" />
<Message Text="Item2: @(Item2)" />
<Message Text=" %(Item2.Identity) Count: @(Item2->Count())" />
</Target>
</Project>
<!--
Output:
Item1: hourglass;boomerang
hourglass Count: 1
boomerang Count: 1
Item2: hourglass;boomerang;hourglass
hourglass Count: 2
boomerang Count: 1
-->
Da das KeepDuplicates
-Attribut zusätzlich zu den Elementwerten auch die Metadaten der Elemente berücksichtigt, ist es wichtig zu wissen, was mit den Metadaten geschieht. Siehe hierzu beispielsweise Erkennen von Duplikaten bei Verwendung der Metadatenelementfunktion.
Aktualisieren von Metadaten für Elemente in einer ItemGroup außerhalb eines Ziels
Für Elemente außerhalb von Zielen können vorhandene Metadaten über das Update
-Attribut aktualisiert werden. Dieses Attribut ist nicht für Elemente unter Zielen verfügbar.
<Project>
<PropertyGroup>
<MetadataToUpdate>pencil</MetadataToUpdate>
</PropertyGroup>
<ItemGroup>
<Item1 Include="stapler">
<Size>medium</Size>
<Color>black</Color>
<Material>plastic</Material>
</Item1>
<Item1 Include="pencil">
<Size>small</Size>
<Color>yellow</Color>
<Material>wood</Material>
</Item1>
<Item1 Include="eraser">
<Color>red</Color>
</Item1>
<Item1 Include="notebook">
<Size>large</Size>
<Color>white</Color>
<Material>paper</Material>
</Item1>
<Item2 Include="notebook">
<Size>SMALL</Size>
<Color>YELLOW</Color>
</Item2>
<!-- Metadata can be expressed either as attributes or as elements -->
<Item1 Update="$(MetadataToUpdate);stapler;er*r;@(Item2)" Price="10" Material="">
<Color>RED</Color>
</Item1>
</ItemGroup>
<Target Name="MyTarget">
<Message Text="Item1: %(Item1.Identity)
Size: %(Item1.Size)
Color: %(Item1.Color)
Material: %(Item1.Material)
Price: %(Item1.Price)" />
</Target>
</Project>
<!--
Item1: stapler
Size: medium
Color: RED
Material:
Price: 10
Item1: pencil
Size: small
Color: RED
Material:
Price: 10
Item1: eraser
Size:
Color: RED
Material:
Price: 10
Item1: notebook
Size: large
Color: RED
Material:
Price: 10
-->
In MSBuild (Version 16.6 und höher) unterstützt das Update
-Attribut qualifizierte Metadatenverweise, um das Importieren von Metadaten aus mindestens zwei Elementen zu vereinfachen.
<Project>
<ItemGroup>
<Item1 Include="stapler">
<Size>medium</Size>
<Color>black</Color>
<Material>plastic</Material>
</Item1>
<Item1 Include="pencil">
<Size>small</Size>
<Color>yellow</Color>
<Material>wood</Material>
</Item1>
<Item1 Include="eraser">
<Size>small</Size>
<Color>red</Color>
<Material>gum</Material>
</Item1>
<Item1 Include="notebook">
<Size>large</Size>
<Color>white</Color>
<Material>paper</Material>
</Item1>
<Item2 Include="pencil">
<Size>MEDIUM</Size>
<Color>RED</Color>
<Material>PLASTIC</Material>
<Price>10</Price>
</Item2>
<Item3 Include="notebook">
<Size>SMALL</Size>
<Color>BLUE</Color>
<Price>20</Price>
</Item3>
<!-- Metadata can be expressed either as attributes or as elements -->
<Item1 Update="@(Item2);er*r;@(Item3)" Size="%(Size)" Color="%(Item2.Color)" Price="%(Item3.Price)" Model="2020">
<Material Condition="'%(Item2.Material)' != ''">Premium %(Item2.Material)</Material>
</Item1>
</ItemGroup>
<Target Name="MyTarget">
<Message Text="Item1: %(Item1.Identity)
Size: %(Item1.Size)
Color: %(Item1.Color)
Material: %(Item1.Material)
Price: %(Item1.Price)
Model: %(Item1.Model)" />
</Target>
</Project>
<!--
Item1: stapler
Size: medium
Color: black
Material: plastic
Price:
Model:
Item1: pencil
Size: small
Color: RED
Material: Premium PLASTIC
Price:
Model: 2020
Item1: eraser
Size: small
Color:
Material: gum
Price:
Model: 2020
Item1: notebook
Size: large
Color:
Material: paper
Price: 20
Model: 2020
-->
Anmerkungen:
- Nicht qualifizierte Metadaten (
%(MetadataName)
) werden an den zu aktualisierenden Elementtyp (Item1
im Beispiel oben) gebunden. Qualifizierte Metadaten (%(Item2.Color)
) werden innerhalb des Satzes der erfassten übereinstimmenden Elementtypen aus dem Aktualisierungsausdruck gebunden. - Wenn ein Element mehrmals innerhalb von und zwischen mehreren referenzierten Elementen übereinstimmt:
- Das letzte Vorkommen jedes referenzierten Elementtyps wird erfasst (also ein erfasstes Element pro Elementtyp).
- Dies entspricht dem Verhalten der Batchverarbeitung von Aufgabenelementen unter den Zielen.
- Hier können%()-Verweise eingefügt werden:
- Metadaten
- Metadatenbedingungen
- Beim Abgleich von Metadatennamen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Aktualisieren von Metadaten für Elemente in einer ItemGroup eines Ziels
Metadaten können auch in Zielen mit einer weniger ausdrucksstarken Syntax als Update
geändert werden:
<Project>
<ItemGroup>
<Item1 Include="stapler">
<Size>medium</Size>
<Color>black</Color>
<Material>plastic</Material>
</Item1>
<Item1 Include="pencil">
<Size>small</Size>
<Color>yellow</Color>
<Material>wood</Material>
</Item1>
<Item1 Include="eraser">
<Size>small</Size>
<Color>red</Color>
<Material>gum</Material>
</Item1>
<Item1 Include="notebook">
<Size>large</Size>
<Color>white</Color>
<Material>paper</Material>
</Item1>
<Item2 Include="pencil">
<Size>MEDIUM</Size>
<Color>RED</Color>
<Material>PLASTIC</Material>
<Price>10</Price>
</Item2>
<Item2 Include="ruler">
<Color>GREEN</Color>
</Item2>
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<!-- Metadata can be expressed either as attributes or as elements -->
<Item1 Size="GIGANTIC" Color="%(Item2.Color)">
<Material Condition="'%(Item2.Material)' != ''">Premium %(Item2.Material)</Material>
</Item1>
</ItemGroup>
<Message Text="Item1: %(Item1.Identity)
Size: %(Item1.Size)
Color: %(Item1.Color)
Material: %(Item1.Material)
Price: %(Item1.Price)
Model: %(Item1.Model)" />
</Target>
</Project>
<!--
Item1: stapler
Size: GIGANTIC
Color: GREEN
Material: Premium PLASTIC
Price:
Model:
Item1: pencil
Size: GIGANTIC
Color: GREEN
Material: Premium PLASTIC
Price:
Model:
Item1: eraser
Size: GIGANTIC
Color: GREEN
Material: Premium PLASTIC
Price:
Model:
Item1: notebook
Size: GIGANTIC
Color: GREEN
Material: Premium PLASTIC
Price:
Model:
-->