Auf Englisch lesen

Freigeben über


Lernprogramm: Verwenden von MSBuild

MSBuild ist die Buildplattform für Microsoft und Visual Studio. In diesem Lernprogramm werden die Bausteine von MSBuild vorgestellt und gezeigt, wie Sie MSBuild-Projekte schreiben, bearbeiten und debuggen. Sie erfahren mehr über:

  • Erstellen und Bearbeiten einer Projektdatei

  • Verwenden von Buildeigenschaften.

  • Verwenden von Buildelementen

Sie können MSBuild aus Visual Studio oder aus dem Befehlsfensterausführen. In diesem Lernprogramm erstellen Sie eine MSBuild-Projektdatei mit Visual Studio. Sie bearbeiten die Projektdatei in Visual Studio, und verwenden Sie das Befehlsfenster, um das Projekt zu erstellen und die Ergebnisse zu untersuchen.

Installieren von MSBuild

Wenn Sie Visual Studio installiert haben, ist MSBuild bereits installiert. Mit Visual Studio 2019 und höher wird sie unter dem Installationsordner von Visual Studio installiert. Bei einer typischen Standardinstallation unter Windows 10 befindet sich MSBuild.exe unter dem Installationsordner in MSBuild\Current\Bin.

Stellen Sie im Installationsprogramm sicher, dass MSBuild-Tools für die von Ihnen verwendeten Workloads ausgewählt sind, und wählen Sie Installierenaus.

Installation von MSBuild

Um MSBuild auf einem System zu installieren, das nicht über Visual Studio verfügt, wechseln Sie zu Buildtools für Visual Studio 2019, oder installieren Sie das .NET SDK-.

Wenn Sie Visual Studio installiert haben, ist MSBuild bereits installiert. Mit Visual Studio 2022 wird sie unter dem Visual Studio-Installationsordner installiert. Bei einer typischen Standardinstallation unter Windows 10 befindet sich MSBuild.exe unter dem Installationsordner in MSBuild\Current\Bin.

Navigieren Sie im Visual Studio-Installationsprogramm zu Einzelne Komponenten, und finden Sie das Kontrollkästchen für MSBuild. Es wird automatisch ausgewählt, wenn Sie eine der anderen zu installierenden Workloads auswählen.

Um MSBuild auf einem System zu installieren, das nicht über Visual Studio verfügt, wechseln Sie zu Buildtools für Visual Studio 2022 auf der Downloadseite. Eine weitere Möglichkeit zum Abrufen von MSBuild besteht darin, das .NET SDK-zu installieren.

Erstellen eines MSBuild-Projekts

Das Visual Studio-Projektsystem basiert auf MSBuild. Es ist einfach, eine neue Projektdatei mit Visual Studio zu erstellen. In diesem Abschnitt erstellen Sie eine C#-Projektdatei. Sie können stattdessen eine Visual Basic-Projektdatei erstellen. Im Kontext dieses Lernprogramms ist der Unterschied zwischen den beiden Projektdateien geringfügig.

So erstellen Sie eine Projektdatei

  1. Öffnen Sie Visual Studio, und erstellen Sie ein Projekt:

    Geben Sie im Suchfeld winformsein, und wählen Sie dann Erstellen einer neuen Windows Forms-App (.NET Framework)aus. Wählen Sie im angezeigten Dialogfeld Erstellen aus.

    Geben Sie im Feld Projektname die Zeichenfolge BuildApp ein. Geben Sie einen Speicherort für die Lösung ein, z.B. D:\.

  2. Klicken Sie auf OK oder Erstellen, um die Projektdatei zu erstellen.

Untersuchen der Projektdatei

Im vorherigen Abschnitt haben Sie Visual Studio zum Erstellen einer C#-Projektdatei verwendet. Die Projektdatei wird im Projektmappen-Explorer durch den Projektknoten „BuildApp“ dargestellt. Sie können den Visual Studio-Code-Editor verwenden, um die Projektdatei zu untersuchen.

So untersuchen Sie die Projektdatei

  1. Klicken Sie im Projektmappen-Explorer auf den Projektknoten BuildApp.

  2. Im Eigenschaftenbrowser wird als Projektdatei-Eigenschaft BuildApp.csproj angezeigt. Alle Projektdateien werden mit dem Suffix projbenannt. Wenn Sie ein Visual Basic-Projekt erstellt haben, wäre der Projektdateiname BuildApp.vbproj.

  3. Klicken Sie erneut mit der rechten Maustaste auf den Projektknoten, und klicken Sie dann BuildApp.csprojbearbeiten.

    Die Projektdatei wird im Code-Editor angezeigt.

Hinweis

Bei einigen Projekttypen, z. B. C++, müssen Sie das Projekt entladen (klicken Sie mit der rechten Maustaste auf die Projektdatei, und wählen Sie Projekt entladen) aus, bevor Sie die Projektdatei öffnen und bearbeiten können.

Ziele und Aufgaben

Projektdateien sind XML-formatierte Dateien mit dem Stammknoten Project.

Die meisten .NET-Projekte verfügen über ein Sdk-Attribut. Diese Projekte werden als SDK-Formatprojekte bezeichnet. Das Verweisen auf ein SDK bedeutet, dass MSBuild eine Reihe von Dateien importiert, die die Buildinfrastruktur für dieses SDK bereitstellen. Wenn Sie nicht auf ein SDK verweisen, können Sie MSBuild weiterhin verwenden, sie haben nur nicht automatisch alle SDK-spezifischen Eigenschaften und Ziele für Sie zur Verfügung.

XML
<Project Sdk="Microsoft.NET.Sdk">

Es gibt viele Variationen von .NET-SDKs für besondere Zwecke; sie werden unter .NET Project SDKsbeschrieben.

Die Arbeit beim Erstellen einer Anwendung wird mit den Elementen Target und Task erledigt.

  • Eine Aufgabe ist die kleinste Arbeitseinheit, also das "Atom" eines Builds. Aufgaben sind unabhängige ausführbare Komponenten, die Eingaben und Ausgaben enthalten können. Es gibt derzeit keine Vorgänge, auf die in der Projektdatei verwiesen oder definiert ist. Sie fügen der Projektdatei aufgaben in den folgenden Abschnitten hinzu. Weitere Informationen finden Sie unter Aufgaben.

  • Ein Ziel ist eine benannte Abfolge von Vorgängen. Es kann eine benannte Abfolge von Vorgängen sein, aber kritisch, es stellt etwas dar, das erstellt oder erledigt werden soll, sodass es auf zielorientierte Weise definiert werden sollte. Weitere Informationen finden Sie unter Ziele.

Das Standardziel ist in der Projektdatei nicht definiert. Stattdessen wird er in importierten Projekten angegeben. Das Import--Element gibt importierte Projekte an. In einem C#-Projekt wird beispielsweise das Standardziel aus der Datei importiert, Microsoft.CSharp.targets.

XML
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Importierte Dateien werden effektiv in die Projektdatei eingefügt, wo auf sie verwiesen wird.

In PROJEKTEN im SDK-Stil wird dieses Importelement nicht angezeigt, da das SDK-Attribut bewirkt, dass diese Datei implizit importiert wird.

MSBuild verfolgt die Ziele eines Builds und garantiert, dass jedes Ziel nicht mehr als einmal erstellt wird.

Hinzufügen eines Ziels und einer Aufgabe

Fügen Sie der Projektdatei ein Ziel hinzu. Fügen Sie dem Ziel eine Aufgabe hinzu, die eine Nachricht druckt.

Fügen Sie ein Ziel und eine Aufgabe hinzu

  1. Fügen Sie diese Zeilen zur Projektdatei direkt nach der Import-Anweisung oder dem öffnenden Project-Element hinzu.

    XML
    <Target Name="HelloWorld">
    </Target>
    

    Dieser Code erstellt ein Ziel namens HelloWorld. Beachten Sie, dass Sie beim Bearbeiten der Projektdatei über IntelliSense-Unterstützung verfügen.

  2. Fügen Sie dem HelloWorld-Ziel Zeilen hinzu, damit der resultierende Abschnitt wie folgt aussieht:

    XML
    <Target Name="HelloWorld">
      <Message Text="Hello"></Message>
      <Message Text="World"></Message>
    </Target>
    
  3. Speichern Sie die Projektdatei.

Die Message Aufgabe ist eine der vielen Aufgaben, die mit MSBuild ausgeliefert werden. Eine vollständige Liste der verfügbaren Aufgaben und Nutzungsinformationen finden Sie unter Aufgabenreferenz.

Die Message Aufgabe verwendet den Zeichenfolgenwert des attributs Text als Eingabe und zeigt ihn auf dem Ausgabegerät an (oder schreibt ihn ggf. in ein oder mehrere Protokolle). Das HelloWorld-Ziel führt die Message-Aufgabe zweimal aus: zuerst wird „Hello“ angezeigt, dann „World“.

Das Ziel erstellen

Wenn Sie versuchen, dieses Projekt aus Visual Studio zu erstellen, erstellt es nicht das von Ihnen definierte Ziel. Der Grund dafür ist, dass Visual Studio das Standardziel auswäht, das immer noch die in der importierten .targets Datei ist.

Führen Sie MSBuild über die Entwickler-Eingabeaufforderung für Visual Studio aus, um das zuvor definierte HelloWorld-Ziel zu erstellen. Verwenden Sie den Befehlszeilenschalter -target oder -t, um das Ziel auszuwählen.

Hinweis

In den folgenden Abschnitten wird die Developer-Eingabeaufforderung als Befehlsfenster bezeichnet.

So erstellen Sie das Ziel:

  1. Öffnen Sie das Befehlsfenster.

    Beginnen Sie im Suchfeld auf der Taskleiste mit der Eingabe des Namens des Tools, z. B. dev oder developer command prompt. Eine Liste der installierten Apps, die Ihrem Suchmuster entsprechen, wird angezeigt.

    Wenn Sie die Datei manuell finden müssen, ist die Datei LaunchDevCmd.bat im Ordner {Visual Studio-Installationsordner}\Common7\Tools.

  2. Navigieren Sie im Befehlsfenster zu dem Ordner, der die Projektdatei enthält, in diesem Fall D:\BuildApp\BuildApp\BuildApp.

  3. Führen Sie msbuild mit dem Befehlsschalter -t:HelloWorldaus. Mit diesem Befehl wird das HelloWorld-Ziel ausgewählt und erstellt:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Untersuchen Sie die Ausgabe im Befehlsfenster. Die beiden Zeilen "Hello" und "World" sollten angezeigt werden:

    Output
    Hello
    World
    

Hinweis

Wenn stattdessen The target "HelloWorld" does not exist in the project angezeigt wird, haben Sie wahrscheinlich vergessen, die Projektdatei im Code-Editor zu speichern. Speichern Sie die Datei, und versuchen Sie es erneut.

Indem Sie zwischen dem Code-Editor und dem Befehlsfenster wechseln, können Sie die Projektdatei ändern und die Ergebnisse schnell anzeigen.

Buildeigenschaften

Buildeigenschaften sind Name-Wert-Paare, anhand derer der Build ausgeführt wird. Mehrere Buildeigenschaften sind bereits oben in der Projektdatei definiert:

XML
<PropertyGroup>
...
  <ProductVersion>10.0.11107</ProductVersion>
  <SchemaVersion>2.0</SchemaVersion>
  <ProjectGuid>{30E3C9D5-FD86-4691-A331-80EA5BA7E571}</ProjectGuid>
  <OutputType>WinExe</OutputType>
...
</PropertyGroup>

Alle Eigenschaften sind untergeordnete Elemente von PropertyGroup-Elementen. Der Name der Eigenschaft ist der Name des untergeordneten Elements, und der Wert der Eigenschaft ist das Textelement des untergeordneten Elements. Zum Beispiel

XML
<TargetFrameworkVersion>net8.0</TargetFrameworkVersion>

definiert die Eigenschaft mit dem Namen TargetFrameworkVersionund gibt den Zeichenfolgenwert "net8.0" an.

Build-Eigenschaften können jederzeit neu definiert werden. If

XML
<TargetFrameworkVersion>net6.0</TargetFrameworkVersion>

erscheint später in der Projektdatei oder in einer Datei, die später in der Projektdatei importiert wird, dann erhält TargetFrameworkVersion den neuen Wert "net6.0".

Untersuchen eines Eigenschaftswerts

Verwenden Sie zum Abrufen des Werts einer Eigenschaft die folgende Syntax, wobei PropertyName der Name der Eigenschaft ist:

XML
$(PropertyName)

Verwenden Sie diese Syntax, um einige der Eigenschaften in der Projektdatei zu untersuchen.

So untersuchen Sie einen Eigenschaftswert

  1. Ersetzen Sie im Code-Editor das HelloWorld-Ziel durch diesen Code:

    XML
    <Target Name="HelloWorld">
      <Message Text="Configuration is $(Configuration)" />
      <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" />
    </Target>
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Diese beiden Zeilen sollten angezeigt werden (Ihre Ausgabe kann unterschiedlich sein):

    Output
    Configuration is Debug
    MSBuildToolsPath is C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\amd64
    
    Output
    Configuration is Debug
    MSBuildToolsPath is C:\Program Files (x86)\Microsoft Visual Studio\2019\MSBuild\16.0\Bin
    

Bedingte Eigenschaften

Viele Eigenschaften wie Configuration werden bedingt definiert, d. h. das attribut Condition wird im Eigenschaftselement angezeigt. Bedingte Eigenschaften werden nur definiert oder neu definiert, wenn die Bedingung als "true" ausgewertet wird. Nicht definierte Eigenschaften erhalten den Standardwert einer leeren Zeichenfolge. Zum Beispiel

XML
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

bedeutet : "Wenn die Konfigurationseigenschaft noch nicht definiert wurde, definieren Sie sie, und geben Sie ihm den Wert "Debug".

Fast alle MSBuild-Elemente können ein Condition Attribut aufweisen. Weitere Informationen zur Verwendung des Condition-Attributs finden Sie unter Bedingungen.

Reservierte Eigenschaften

MSBuild reserviert einige Eigenschaftennamen, um Informationen über die Projektdatei und die MSBuild-Binärdateien zu speichern. MSBuildToolsPath ist ein Beispiel für eine reservierte Eigenschaft. Reservierte Eigenschaften werden mit der $ Notation wie jede andere Eigenschaft referenziert. Weitere Informationen finden Sie unter Vorgehensweise: Verweisen auf den Namen oder Speicherort der Projektdatei und Reservierte und bekannte Eigenschaften für MSBuild.

Umgebungsvariablen

Sie können auf Umgebungsvariablen in Projektdateien auf die gleiche Weise wie Buildeigenschaften verweisen. Wenn Sie beispielsweise die PATH Umgebungsvariable in Ihrer Projektdatei verwenden möchten, verwenden Sie $(Path). Wenn das Projekt eine Eigenschaftsdefinition enthält, die denselben Namen wie eine Umgebungsvariable hat, überschreibt die Eigenschaft im Projekt den Wert der Umgebungsvariable. Weitere Informationen finden Sie unter Vorgehensweise: Verwenden von Umgebungsvariablen in einem Build.

Festlegen von Eigenschaften über die Befehlszeile

Eigenschaften können in der Befehlszeile mithilfe des -property oder -p Befehlszeilenschalters definiert werden. Von der Befehlszeile empfangene Eigenschaftswerte setzen Eigenschaftswerte außer Kraft, die in den Projektdatei- und Umgebungsvariablen festgelegt sind.

So legen Sie einen Eigenschaftswert über die Befehlszeile fest:

  1. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld -p:Configuration=Release
    
  2. Prüfen Sie die Ausgabe. Diese Zeile sollte angezeigt werden:

    Output
    Configuration is Release.
    

MSBuild erstellt die Configuration-Eigenschaft und gibt den Wert "Release" an.

Sonderzeichen

Bestimmte Zeichen haben in MSBuild-Projektdateien eine besondere Bedeutung. Beispiele für diese Zeichen sind Semikolons (;) und Sternchen (*). Um diese Sonderzeichen als Literale in einer Projektdatei zu verwenden, müssen sie mithilfe der Syntax %<xx>angegeben werden, wobei <xx> den ASCII-Hexadezimalwert des Zeichens darstellt.

Ändern Sie die Aufgabe "Nachricht", um den Wert der Konfigurationseigenschaft mit Sonderzeichen anzuzeigen, damit sie besser lesbar ist.

So verwenden Sie Sonderzeichen in der Aufgabe "Nachricht":

  1. Ersetzen Sie im Code-Editor beide Nachrichtenaufgaben durch diese Zeile:

    XML
    <Message Text="%24(Configuration) is %22$(Configuration)%22" />
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Diese Zeile sollte angezeigt werden:

    Output
    $(Configuration) is "Debug"
    

Weitere Informationen finden Sie unter MSBuild-Sonderzeichen.

Erstellen von Elementen

Ein Element ist ein Informationselement, in der Regel ein Dateiname, der als Eingabe für das Buildsystem verwendet wird. Beispielsweise kann eine Auflistung von Elementen, die Quelldateien darstellen, an eine Aufgabe mit dem Namen "Kompilieren" übergeben werden, um sie in eine Assembly zu kompilieren.

Alle Elemente sind untergeordnete Elemente von ItemGroup-Elementen. Der Elementname ist der Name des untergeordneten Elements, und der Elementwert ist der Wert des Include-Attributs des untergeordneten Elements. Die Werte von Elementen mit demselben Namen werden in Elementtypen dieses Namens gesammelt. Zum Beispiel

XML
<ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

definiert eine Elementgruppe mit zwei Elementen. Der Elementtyp "Kompilieren" hat zwei Werte: Program.cs und Properties\AssemblyInfo.cs.

Der folgende Code erstellt denselben Elementtyp, indem beide Dateien in einem Include Attribut deklariert werden, getrennt durch ein Semikolon.

XML
<ItemGroup>
    <Compile Include="Program.cs;Properties\AssemblyInfo.cs" />
</ItemGroup>

Weitere Informationen finden Sie unter Elemente.

Hinweis

Dateipfade sind relativ zum Ordner, der die MSBuild-Projektdatei enthält, auch wenn es sich bei der Projektdatei um eine importierte Projektdatei handelt. Es gibt einige Ausnahmen davon, z. B. bei Verwendung von Import und UsingTask Elementen.

Elementtypwerte überprüfen

Um die Werte eines Elementtyps abzurufen, verwenden Sie die folgende Syntax, wobei ItemType der Name des Elementtyps ist:

XML
@(ItemType)

Verwenden Sie diese Syntax, um den Compile Elementtyp in der Projektdatei zu untersuchen.

So untersuchen Sie Elementtypwerte:

  1. Ersetzen Sie im Code-Editor die Zielaufgabe "HelloWorld" durch diesen Code:

    XML
    <Target Name="HelloWorld">
      <Message Text="Compile item type contains @(Compile)" />
    </Target>
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Du solltest diese lange Zeile sehen:

    Output
    Compile item type contains Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs
    

Die Werte eines Elementtyps werden standardmäßig durch Semikolons getrennt.

Um das Trennzeichen eines Elementtyps zu ändern, verwenden Sie die folgende Syntax, wobei ItemType der Elementtyp und Trennzeichen eine Zeichenfolge mit mindestens einem getrennten Zeichen ist:

XML
@(ItemType, Separator)

Ändern Sie die Message-Aufgabe, um Compile-Elemente mithilfe von Wagenrückläufen und Zeilenvorschüben (%0A%0D) auf jeweils eigenen Zeilen anzuzeigen.

So zeigen Sie Elementtypwerte auf jeweils eigenen Zeilen an

  1. Ersetzen Sie im Code-Editor die Aufgabe "Nachricht" durch diese Zeile:

    XML
    <Message Text="Compile item type contains @(Compile, '%0A%0D')" />
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Diese Zeilen sollten angezeigt werden:

    Output
    Compile item type contains Form1.cs
    Form1.Designer.cs
    Program.cs
    Properties\AssemblyInfo.cs
    Properties\Resources.Designer.cs
    Properties\Settings.Designer.cs
    

Include, Exclude und Platzhalter

Sie können die Wildcards "*", "**" und "?" mit dem attribut Include verwenden, um Einem Elementtyp Elemente hinzuzufügen. Zum Beispiel

XML
<Photos Include="images\*.jpeg" />

Fügt alle Dateien mit der Dateierweiterung .jpeg im Ordner Bilder dem Elementtyp "Fotos" hinzu, während

XML
<Photos Include="images\**\*.jpeg" />

alle Dateien mit der Dateierweiterung JPEG im Ordner images und allen Unterordnern dem Photos-Elementtyp hinzufügt. Weitere Beispiele finden Sie unter Vorgehensweise: Auswählen von Dateien für den Buildvorgang.

Beachten Sie, dass Elemente, wenn sie deklariert werden, dem Elementtyp hinzugefügt werden. Zum Beispiel

XML
<Photos Include="images\*.jpeg" />
<Photos Include="images\*.gif" />

erstellt einen Elementtyp namens "Photo", der alle Dateien im Bilder Ordner mit einer Dateierweiterung von .jpeg oder .gifenthält. Diese Zeilen entsprechen der folgenden Zeile:

XML
<Photos Include="images\*.jpeg;images\*.gif" />

Sie können ein Element aus einem Elementtyp mit dem attribut Exclude ausschließen. Zum Beispiel

XML
<Compile Include="*.cs" Exclude="*Designer*">

fügt alle Dateien mit der Dateierweiterung .cs zum Compile Elementtyp hinzu, mit Ausnahme von Dateien, deren Namen die Zeichenfolge Designerenthalten. Weitere Beispiele finden Sie unter Vorgehensweise: Ausschließen von Dateien vom Buildvorgang.

Das Attribut Exclude wirkt sich nur auf die Elemente aus, die durch das Attribut Include im Element hinzugefügt wurden, das beide enthält. Zum Beispiel

XML
<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">

würde die Datei Form1.csnicht ausschließen, die im vorherigen Elementelement hinzugefügt wurde.

Zum Einschließen und Ausschließen von Elementen

  1. Ersetzen Sie im Code-Editor die Aufgabe "Nachricht" durch diese Zeile:

    XML
    <Message Text="XFiles item type contains @(XFiles)" />
    
  2. Fügen Sie diese Elementgruppe direkt hinter dem Importelement hinzu:

    XML
    <ItemGroup>
       <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" />
    </ItemGroup>
    
  3. Speichern Sie die Projektdatei.

  4. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  5. Prüfen Sie die Ausgabe. Diese Zeile sollte angezeigt werden:

    Output
    XFiles item type contains Form1.cs;Program.cs;Properties/Resources.resx
    

Elementmetadaten

Elemente können zusätzlich zu den informationen, die aus dem Include und Exclude Attributen gesammelt wurden, Metadaten enthalten. Aufgaben, die mehr Informationen zu Elementen erfordern, als nur der Elementwert, können diese Metadaten verwenden.

Elementmetadaten werden in der Projektdatei deklariert, indem ein Element mit dem Namen der Metadaten als untergeordnetes Element des Elements erstellt wird. Ein Element kann null oder mehr Metadatenwerte enthalten. Das folgende CSFile-Element enthält z. B. Kulturmetadaten mit dem Wert "Fr":

XML
<ItemGroup>
    <CSFile Include="main.cs">
        <Culture>Fr</Culture>
    </CSFile>
</ItemGroup>

Um den Metadatenwert eines Elementtyps abzurufen, verwenden Sie die folgende Syntax, wobei ItemType der Name des Elementtyps und MetaDataName der Name der Metadaten ist:

XML
%(ItemType.MetaDataName)

So untersuchen Sie Elementmetadaten:

  1. Ersetzen Sie im Code-Editor die Aufgabe "Nachricht" durch diese Zeile:

    XML
    <Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Diese Zeilen sollten angezeigt werden:

    Output
    Compile.DependentUpon:
    Compile.DependentUpon: Form1.cs
    Compile.DependentUpon: Resources.resx
    Compile.DependentUpon: Settings.settings
    

Beachten Sie, dass der Ausdruck "Compile.DependentUpon" mehrmals angezeigt wird. Die Verwendung von Metadaten mit dieser Syntax innerhalb eines Ziels bewirkt "Batchverarbeitung". Batchverarbeitung bedeutet, dass die Aufgaben innerhalb des Ziels einmal für jeden eindeutigen Metadatenwert ausgeführt werden. Batchverarbeitung ist die MSBuild-Skriptentsprechung des häufig verwendeten Programmierkonstrukts „ForEach-Schleife“. Weitere Informationen finden Sie unter MSBuild Batching (Batchverarbeitung).

Bekannte Metadaten

Wenn ein Element einer Elementliste hinzugefügt wird, wird diesem Element einige bekannte Metadaten zugewiesen. Beispielsweise gibt %(Filename) den Dateinamen eines elements zurück. Eine vollständige Liste bekannter Metadaten finden Sie unter Metadaten bekannter Elemente.

So untersuchen Sie bekannte Metadaten:

  1. Ersetzen Sie im Code-Editor die Aufgabe "Nachricht" durch diese Zeile:

    XML
    <Message Text="Compile Filename: %(Compile.Filename)" />
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Diese Zeilen sollten angezeigt werden:

    Output
    Compile Filename: Form1
    Compile Filename: Form1.Designer
    Compile Filename: Program
    Compile Filename: AssemblyInfo
    Compile Filename: Resources.Designer
    Compile Filename: Settings.Designer
    

Wenn Sie die beiden vorherigen Beispiele vergleichen, können Sie sehen, dass zwar nicht jedes Element im Compile Elementtyp die Metadaten "DependentUpon" aufweist, aber alle Elemente über die bekannten Metadaten des Dateinamens verfügen.

Metadatentransformationen

Elementlisten können in neue Elementlisten umgewandelt werden. Um eine Elementliste zu transformieren, verwenden Sie die folgende Syntax, wobei <ItemType> der Name des Elementtyps ist und <MetadataName> der Name der Metadaten ist:

XML
@(ItemType -> '%(MetadataName)')

Eine Elementliste mit Quelldateien kann z. B. mithilfe eines Ausdrucks wie @(SourceFiles -> '%(Filename).obj')in eine Auflistung von Objektdateien umgewandelt werden. Weitere Informationen finden Sie unter Transforms.

So transformieren Sie Elemente mithilfe von Metadaten:

  1. Ersetzen Sie im Code-Editor die Aufgabe "Nachricht" durch diese Zeile:

    XML
    <Message Text="Backup files: @(Compile->'%(filename).bak')" />
    
  2. Speichern Sie die Projektdatei.

  3. Geben Sie im Befehlsfensterdiese Zeile ein, und führen Sie sie aus:

    Windows-Eingabeaufforderung
    msbuild buildapp.csproj -t:HelloWorld
    
  4. Prüfen Sie die Ausgabe. Diese Zeile sollte angezeigt werden:

    Output
    Backup files: Form1.bak;Form1.Designer.bak;Program.bak;AssemblyInfo.bak;Resources.Designer.bak;Settings.Designer.bak
    

Beachten Sie, dass in dieser Syntax ausgedrückte Metadaten keine Batchverarbeitung verursachen.

Nächste Schritte

Wenn Sie erfahren möchten, wie Sie eine einfache Projektdatei einzeln erstellen, probieren Sie unter Windows Erstellen einer MSBuild-Projektdatei ganz neuaus.

Wenn Sie in erster Linie das .NET SDK verwenden, lesen Sie weiter unter MSBuild Reference für .NET SDK Projects.