Neue Methoden zum Bearbeiten von Elementen und Eigenschaften (MSBuild)

Aktualisiert: November 2007

Ab MSBuild 3.5 stehen Ihnen die folgenden Möglichkeiten zur Verfügung:

  • Definieren Sie eine Elementdefinitionsgruppe mit Metadaten, die sich auf alle Elemente im Projekt beziehen.

  • Erstellen, löschen, kombinieren oder ändern Sie Eigenschaften, Elemente und Elementmetadaten auf dynamische Weise direkt in einer Elementgruppe. Sie können diese Methode anstelle der CreateItem-Aufgabe und CreateProperty-Aufgabe verwenden.

Elementdefinitionsgruppen

Mit dem ItemDefinitionGroup-Element können Sie einen Satz von Elementdefinitionen festlegen, bei dem es sich um Metadatenwerte handelt, die standardmäßig auf alle Elemente im Projekt angewendet werden. Weitere Informationen finden Sie unter Elementdefinitionen.

Dynamisches Anpassen von Metadaten in einer Elementgruppe

MSBuild verwendet ItemGroup-Element (MSBuild) und PropertyGroup-Element (MSBuild) zum statischen Deklarieren von Elementen und Eigenschaften. In MSBuild 2.0 mussten Sie zum Erstellen oder Ändern von Eigenschaften und Elementen während des Buildprozesses CreateItem-Aufgabe oder CreateProperty-Aufgabe verwenden. Dieser Prozess war kompliziert und unterstützte dynamische Aktualisierungen nicht sehr effektiv. Mit MSBuild 3.5 können Sie dagegen Eigenschaften, Elemente und Elementdaten direkt in einer Elementgruppe auf dynamische Weise erstellen, löschen, kombinieren oder ändern.

Vergleichen Sie die folgenden Beispiele. Beispiel 1 erläutert, wie die CreateItem-Aufgabe zum Hinzufügen eines Aufgabenparameters und zum Erstellen einer neuen Elementliste mit Metadaten verwendet wird. Beispiel 3 erläutert die neue Methode zum direkten Hinzufügen von Metadaten zur Elementgruppe.

Beispiel 1: Ein einfaches Beispiel zum Hinzufügen eines Aufgabenparameters mit der CreateItem-Aufgabe. Das erste Ziel verwendet die CreateItem-Aufgabe zum dynamischen Erstellen einer neuen Elementliste mit dem Namen CultureResource. Das zweite Ziel fügt neue Metadaten, genannt TargetDirectory, für alle Kulturressourcen in der ursprünglichen Liste hinzu.

<Target Name="GenerateBeforeCompile">
     <CreateItem Include="SomeGeneratedCode.cs">
        <Output TaskParameter="Include" ItemName="Compile" /> 
    </CreateItem>
</Target>

<Target Name="ProcessCultureResources">
    <CreateItem Include="@(EmbeddedResource)" 
      Condition="'%(Culture)' != ''"
      AdditionalMetadata="TargetDirectory=%
      (EmbeddedResource.Culture)">
    <Output TaskParameter="Include" ItemName="CultureResource" />
    </CreateItem>
</Target>

Beispiel 2: Die Ergebnisse der beiden vorherigen Beispiele können nun erzielt werden, indem Parameter und Metadaten direkt zur Elementgruppe hinzugefügt werden.

<Target Name="GenerateBeforeCompile">
     <ItemGroup>
        <Compile Include="SomeGeneratedCode.cs" />
    </ItemGroup>
 </Target>
 
<Target Name="ProcessCultureResources">
    <ItemGroup>
        <CultureResource Include="@(EmbeddedResource)"
          Condition="'%(EmbeddedResource.Culture)' != ''">
             <TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
        </CultureResource>
    </ItemGroup>
</Target>

Entfernen von Elementen

Um in älteren Versionen von MSBuild Elemente zu entfernen, mussten Sie neue Listen erstellen. Jetzt können Sie Elemente jedoch direkt mit dem neuen Remove-Parameter entfernen, wie nachfolgend dargestellt:

<ItemGroup>
    <!—Remove *.licx from the EmbeddedResource list - ->
    <EmbeddedResource Remove="*.licx" />
 
    <!—Or remove items in @(licx) from EmbeddedResource list -- >
    <EmbeddedResource Remove="@(licx)" />
</ItemGroup>

Siehe auch

Konzepte

Referenz zum MSBuild-Projektdateischema

Weitere Ressourcen

MSBuild-Grundlagen