MSBuildMSBuild

Das Microsoft Build EngineMicrosoft Build Engine ist eine Plattform zum Erstellen von Anwendungen.The Microsoft Build EngineMicrosoft Build Engine is a platform for building applications. Diese Engine, die auch als MSBuild bezeichnet wird, stellt ein XML-Schema für Projektdateien bereit, mit dem sich steuern lässt, wie die Buildplattform Software und Prozesse erstellt und verarbeitet.This engine, which is also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software. Visual Studio verwendet MSBuild, ist aber nicht von Visual Studio abhängig.Visual Studio uses MSBuild, but it doesn't depend on Visual Studio. Wenn Sie msbuild.exe im Projekt oder in der Projektmappendatei aufrufen, können Sie Produkte in Umgebungen orchestrieren und erstellen, in denen Visual Studio nicht installiert ist.By invoking msbuild.exe on your project or solution file, you can orchestrate and build products in environments where Visual Studio isn't installed.

Visual Studio verwendet MSBuild, um verwaltete Projekte zu laden und zu erstellen.Visual Studio uses MSBuild to load and build managed projects. Die Projektdateien in Visual Studio (CSPROJ-, VBPROJ-, VCXPROJ-Dateien und andere) enthalten MSBuild-XML-Code, der ausgeführt wird, wenn Sie ein Projekt mithilfe der IDE erstellen.The project files in Visual Studio (.csproj, .vbproj, .vcxproj, and others) contain MSBuild XML code that executes when you build a project by using the IDE. Alle erforderlichen Einstellungen und Buildprozesse werden für die reguläre Entwicklungsarbeit in Visual Studio-Projekte importiert. Sie können diese jedoch in Visual Studio oder mithilfe eine XML-Editors erweitern oder ändern.Visual Studio projects import all the necessary settings and build processes to do typical development work, but you can extend or modify them from within Visual Studio or by using an XML editor.

Weitere Informationen zu MSBuild für C++ finden Sie unter MSBuild (C++).For information about MSBuild for C++, see MSBuild (C++).

Die folgenden Beispiele veranschaulichen, wann Sie Builds über die MSBuild-Befehlszeile anstelle der Visual Studio-IDE ausführen sollten.The following examples illustrate when you might run builds by using an MSBuild command line instead of the Visual Studio IDE.

  • Visual Studio ist nicht installiert.Visual Studio isn't installed. (MSBuild ohne Visual Studio herunterladen)(download MSBuild without Visual Studio)

  • Sie möchten die 64-Bit-Version von MSBuild verwenden.You want to use the 64-bit version of MSBuild. Diese Version von MSBuild ist normalerweise nicht erforderlich, ermöglicht MSBuild jedoch den Zugriff auf mehr Arbeitsspeicher.This version of MSBuild is usually unnecessary, but it allows MSBuild to access more memory.

  • Sie möchten einen Build in mehreren Prozessen ausführen.You want to run a build in multiple processes. Sie können die IDE jedoch verwenden, um die gleichen Ergebnisse in Projekten in C++ und C# zu erzielen.However, you can use the IDE to achieve the same result on projects in C++ and C#.

  • Sie möchten das Buildsystem ändern.You want to modify the build system. Möglicherweise möchten Sie z. B. die folgenden Aktionen aktivieren:For example, you might want to enable the following actions:

    • Dateien vorverarbeiten, bevor sie den Compiler erreichen.Preprocess files before they reach the compiler.

    • Kopieren Sie die Buildausgaben an eine andere Stelle.Copy the build outputs to a different place.

    • Erstellen Sie komprimierte Dateien aus den Buildausgaben.Create compressed files from build outputs.

    • Führen Sie einen Nachverarbeitungsschritt durch.Do a post-processing step. Beispielsweise können Sie eine Assembly mit einer anderen Version stempeln.For example, you might want to stamp an assembly with a different version.

Sie können Code in der Visual Studio-IDE schreiben, aber Builds mit MSBuild ausführen.You can write code in the Visual Studio IDE but run builds by using MSBuild. Des Weiteren können Sie Code in der IDE auf dem Entwicklungscomputer erstellen, jedoch eine MSBuild-Befehlszeile verwenden, um Code zu erstellen, der von mehreren Entwicklern integriert wird.As another alternative, you can build code in the IDE on a development computer but use an MSBuild command line to build code that's integrated from multiple developers.

Note

Sie können Team Foundation Build verwenden, um die Anwendung automatisch zu kompilieren, zu testen und bereitzustellen.You can use Team Foundation Build to automatically compile, test, and deploy your application. Das Buildsystem kann Builds automatisch ausführen, wenn Entwickler Code z. B. als Teil einer fortlaufenden Integrationsstrategie oder gemäß einem Zeitplan (z. B. bei einem Build für einen nächtlichen Buildüberprüfungstest) einchecken.Your build system can automatically run builds when developers check in code (for example, as part of a Continuous Integration strategy) or according to a schedule (for example, a nightly Build Verification Test build). Team Foundation Build kompiliert den Code mithilfe von MSBuild.Team Foundation Build compiles your code by using MSBuild. Weitere Informationen finden Sie unter Azure Pipelines.For more information, see Azure Pipelines.

Dieses Thema enthält eine Übersicht über MSBuild.This topic provides an overview of MSBuild. Ein Einführungstutorial finden Sie unter Exemplarische Vorgehensweise: Verwenden von MSBuild.For an introductory tutorial, see Walkthrough: Using MSBuild.

Verwenden von MSBuild an einer EingabeaufforderungUse MSBuild at a command prompt

Übergeben Sie eine Projektdatei mit den entsprechenden Befehlszeilenoptionen an MSBuild.exe, um MSBuildMSBuild an einer Eingabeaufforderung auszuführen.To run MSBuildMSBuild at a command prompt, pass a project file to MSBuild.exe, together with the appropriate command-line options. Über Befehlszeilenoptionen können Sie Eigenschaften festlegen, bestimmte Ziele ausführen und weitere Optionen für die Steuerung des Buildprozesses festlegen.Command-line options let you set properties, execute specific targets, and set other options that control the build process. Beispielsweise verwenden Sie die folgende Befehlszeilensyntax zum Erstellen der Datei MyProj.proj, deren Configuration-Eigenschaft auf Debug festgelegt ist.For example, you would use the following command-line syntax to build the file MyProj.proj with the Configuration property set to Debug.

MSBuild.exe MyProj.proj -property:Configuration=Debug

Weitere Informationen zu Befehlszeilenoptionen in MSBuildMSBuild finden Sie in der MSBuild-Befehlszeilenreferenz.For more information about MSBuildMSBuild command-line options, see Command-line reference.

Important

Bevor Sie ein Projekt herunterladen, bestimmen Sie die Vertrauenswürdigkeit des Codes.Before you download a project, determine the trustworthiness of the code.

ProjektdateiProject file

MSBuildMSBuild verwendet ein einfaches und erweiterbares XML-basiertes Projektdateiformat.uses an XML-based project file format that's straightforward and extensible. Mithilfe des MSBuildMSBuild-Projektdateiformats können Entwickler die zu erstellenden Elemente beschreiben. Darüber hinaus lässt sich damit beschreiben, wie diese Elemente für verschiedene Betriebssysteme und Konfigurationen erstellt werden müssen.The MSBuildMSBuild project file format lets developers describe the items that are to be built, and also how they are to be built for different operating systems and configurations. Zusätzlich können Entwickler im Projektdateiformat wiederverwendbare Buildregeln erstellen, die in separate Dateien unterteilt werden können, um Builds im Produkt über verschiedene Projekte hinweg konsistent auszuführen.In addition, the project file format lets developers author reusable build rules that can be factored into separate files so that builds can be performed consistently across different projects in the product.

In den folgenden Abschnitten werden einige der Grundelemente des MSBuildMSBuild-Projektdateiformats beschrieben.The following sections describe some of the basic elements of the MSBuildMSBuild project file format. Ein Tutorial zum Erstellen einer einfachen Projektdatei finden Sie unter Exemplarische Vorgehensweise: Erstellen einer neuen MSBuild-Projektdatei.For a tutorial about how to create a basic project file, see Walkthrough: Creating an MSBuild project file from scratch.

EigenschaftenProperties

Eigenschaften stellen Schlüssel/Wert-Paare dar, die zur Konfiguration von Builds verwendet werden können.Properties represent key/value pairs that can be used to configure builds. Eigenschaften werden deklariert, indem ein Element mit dem Namen der jeweiligen Eigenschaft als untergeordnetes Element eines PropertyGroup-Elements erstellt wird.Properties are declared by creating an element that has the name of the property as a child of a PropertyGroup element. Durch den folgenden Code wird beispielsweise die Eigenschaft BuildDir mit dem Wert Build erstellt.For example, the following code creates a property named BuildDir that has a value of Build.

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

Sie können eine Eigenschaft bedingt definieren, indem Sie ein Condition-Attribut im Element platzieren.You can define a property conditionally by placing a Condition attribute in the element. Sofern wenn die Bedingung nicht true ergibt, wird der Inhalt bedingter Elemente ignoriert.The contents of conditional elements are ignored unless the condition evaluates to true. Im folgenden Beispiel wird das Configuration-Element definiert, wenn es noch nicht definiert wurde.In the following example, the Configuration element is defined if it hasn't yet been defined.

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

In der gesamten Projektdatei kann mithilfe der Syntax $(<PropertyName>) auf Eigenschaften verwiesen werden.Properties can be referenced throughout the project file by using the syntax $(<PropertyName>). Beispielsweise wird mit $(BuildDir) und $(Configuration) auf die Eigenschaft in den vorangehenden Beispielen verwiesen.For example, you can reference the properties in the previous examples by using $(BuildDir) and $(Configuration).

Weitere Informationen zu Eigenschaften finden Sie unter MSBuild Properties (MSBuild-Eigenschaften).For more information about properties, see MSBuild properties.

ElementeItems

Elemente sind Eingaben in das Buildsystem und stellen in der Regel Dateien dar.Items are inputs into the build system and typically represent files. Elemente werden auf der Grundlage benutzerdefinierter Elementnamen in Elementtypen gruppiert.Items are grouped into item types, based on user-defined item names. Diese Elementtypen können als Parameter für Aufgaben verwendet werden, die mithilfe der einzelnen Elemente die Schritte des Buildprozesses ausführen.These item types can be used as parameters for tasks, which use the individual items to perform the steps of the build process.

In der Projektdatei werden Elemente deklariert, indem ein Element mit dem Namen des jeweiligen Elementtyps als untergeordnetes Element eines ItemGroup-Elements erstellt wird.Items are declared in the project file by creating an element that has the name of the item type as a child of an ItemGroup element. Im folgenden Code wird z. B. der Elementtyp Compile mit zwei Dateien erstellt.For example, the following code creates an item type named Compile, which includes two files.

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

In der gesamten Projektdatei kann mithilfe der Syntax @(<ItemType>) auf Elementtypen verwiesen werden.Item types can be referenced throughout the project file by using the syntax @(<ItemType>). Auf den Elementtyp im Beispiel wird beispielsweise mit @(Compile) verwiesen.For example, the item type in the example would be referenced by using @(Compile).

In MSBuild muss bei Elementen und Attributnamen die Groß-/Kleinschreibung beachtet werden.In MSBuild, element and attribute names are case-sensitive. Bei Namen von Eigenschaften, Elementen und Metadaten ist dies nicht der Fall.However, property, item, and metadata names are not. Im folgenden Beispiel werden der Compile-Elementtyp oder der comPile-Elementtyp oder eine beliebige andere Fallvariante erstellt und der Wert "one.cs;two.cs" zugewiesen.The following example creates the item type Compile, comPile, or any other case variation, and gives the item type the value "one.cs;two.cs".

<ItemGroup>
  <Compile Include="one.cs" />
  <comPile Include="two.cs" />
</ItemGroup>

Elemente können mit Platzhalterzeichen deklariert werden und zusätzliche Metadaten für erweiterte Buildszenarios enthalten.Items can be declared by using wildcard characters and may contain additional metadata for more advanced build scenarios. Weitere Informationen zu Elementen finden Sie unter Items (MSBuild-Elemente).For more information about items, see Items.

AufgabenTasks

Aufgaben sind Einheiten ausführbaren Codes, die in MSBuildMSBuild-Projekten zum Ausführen von Buildvorgängen verwendet werden.Tasks are units of executable code that MSBuildMSBuild projects use to perform build operations. Eine Aufgabe kann beispielsweise Eingabedateien kompilieren oder ein externes Tool ausführen.For example, a task might compile input files or run an external tool. Aufgaben können wiederverwendet werden, auch von verschiedenen Entwicklern in unterschiedlichen Projekten.Tasks can be reused, and they can be shared by different developers in different projects.

Die Ausführungslogik einer Aufgabe wird in verwaltetem Code geschrieben und MSBuildMSBuild mithilfe des UsingTask-Elements zugeordnet.The execution logic of a task is written in managed code and mapped to MSBuildMSBuild by using the UsingTask element. Sie können eine eigene Aufgabe schreiben, indem Sie einen verwalteten Typ erstellen, der die ITask-Schnittstelle implementiert.You can write your own task by authoring a managed type that implements the ITask interface. Weitere Informationen zum Erstellen von Aufgaben finden Sie unter Schreiben von Aufgaben.For more information about how to write tasks, see Task writing.

MSBuildMSBuild enthält allgemeine Aufgaben, die Sie an Ihre jeweiligen Anforderungen anpassen können.includes common tasks that you can modify to suit your requirements. Beispiele hierfür sind Copy zum Kopieren von Dateien, MakeDir zum Erstellen von Verzeichnissen und Csc zum Kompilieren von Visual C#-Quellcodedateien.Examples are Copy, which copies files, MakeDir, which creates directories, and Csc, which compiles Visual C# source code files. Eine Liste der verfügbaren Aufgaben sowie Informationen zu ihrer jeweiligen Verwendung finden Sie unter MSBuild-Aufgabenreferenz.For a list of available tasks together with usage information, see Task reference.

Eine Aufgabe wird in einer MSBuildMSBuild-Projektdatei ausgeführt, indem ein Element mit dem Namen der Aufgabe als untergeordnetes Element eines Target-Elements erstellt wird.A task is executed in an MSBuildMSBuild project file by creating an element that has the name of the task as a child of a Target element. Die meisten Aufgaben akzeptieren Parameter, die als Attribute des Elements übergeben werden.Tasks typically accept parameters, which are passed as attributes of the element. Als Parameter können Eigenschaften und Elemente von MSBuildMSBuild verwendet werden.Both MSBuildMSBuild properties and items can be used as parameters. Der folgende Code ruft z.B. die MakeDir-Aufgabe auf und übergibt ihr den im vorangehenden Beispiel deklarierten Wert der Eigenschaft BuildDir.For example, the following code calls the MakeDir task and passes it the value of the BuildDir property that was declared in the earlier example.

<Target Name="MakeBuildDirectory">
    <MakeDir  Directories="$(BuildDir)" />
</Target>

Weitere Informationen zu Aufgaben finden Sie unter Aufgaben.For more information about tasks, see Tasks.

ZieleTargets

Durch Ziele werden Aufgaben in einer bestimmten Reihenfolge gruppiert und Abschnitte der Projektdatei als Einstiegspunkte in den Buildprozess verfügbar gemacht.Targets group tasks together in a particular order and expose sections of the project file as entry points into the build process. Ziele werden oft in logischen Abschnitten gruppiert, um ihre Lesbarkeit zu erhöhen und Erweiterungen zu ermöglichen.Targets are often grouped into logical sections to increase readability and to allow for expansion. Wenn die Buildschritte in Ziele unterteilt werden, können Sie einen Teil des Buildprozesses in anderen Zielen aufrufen, ohne diesen Codeabschnitt in jedes Ziel kopieren zu müssen.Breaking the build steps into targets lets you call one piece of the build process from other targets without copying that section of code into every target. Wenn mehrere Einstiegspunkte in den Buildprozess die Erstellung von Verweisen erfordern, können Sie beispielsweise ein Ziel erstellen, durch das Verweise erstellt werden, und dieses Ziel anschließend über jeden Einstiegspunkt ausführen, für den es erforderlich ist.For example, if several entry points into the build process require references to be built, you can create a target that builds references and then run that target from every entry point where it's required.

Ziele werden in der Projektdatei mithilfe des Target-Elements deklariert.Targets are declared in the project file by using the Target element. Der folgende Code erstellt z.B. ein Ziel mit dem Namen Compile, das anschließend die Csc-Aufgabe mit der im vorangehenden Beispiel deklarierten Elementliste aufruft.For example, the following code creates a target named Compile, which then calls the Csc task that has the item list that was declared in the earlier example.

<Target Name="Compile">
    <Csc Sources="@(Compile)" />
</Target>

In fortgeschritteneren Szenarios können Ziele die zwischen verschiedenen Zielen bestehenden Beziehungen beschreiben und Abhängigkeitsanalysen durchführen. Wenn das jeweilige Ziel aktuell ist, können daher ganze Bereiche des Buildprozesses übersprungen werden.In more advanced scenarios, targets can be used to describe relationships among one another and perform dependency analysis so that whole sections of the build process can be skipped if that target is up-to-date. Weitere Informationen zu Zielen finden Sie unter Targets (MSBuild-Ziele).For more information about targets, see Targets.

BuildprotokolleBuild logs

Sie können Buildfehler, Warnungen und Meldungen in der Konsole oder auf anderen Ausgabegeräten protokollieren.You can log build errors, warnings, and messages to the console or another output device. Weitere Informationen finden Sie unter Erhalten von Buildprotokollen und Protokollierung in MSBuild.For more information, see Obtaining build logs and Logging in MSBuild.

Verwenden von MSBuild in Visual StudioUse MSBuild in Visual Studio

Visual StudioVisual Studio verwendet das MSBuildMSBuild-Projektdateiformat, um Buildinformationen zu verwalteten Projekten zu speichern.uses the MSBuildMSBuild project file format to store build information about managed projects. Die Projekteinstellungen, die mithilfe der Visual StudioVisual Studio-Schnittstelle hinzugefügt oder geändert werden, werden in der *PROJ-Datei gespeichert, die für das jeweilige Projekt generiert wird.Project settings that are added or changed by using the Visual StudioVisual Studio interface are reflected in the .*proj file that's generated for every project. Visual StudioVisual Studio erstellt verwaltete Projekte mithilfe einer gehosteten Instanz von MSBuildMSBuild.uses a hosted instance of MSBuildMSBuild to build managed projects. Das bedeutet, dass ein verwaltetes Projekt mit demselben Ergebnis entweder in Visual StudioVisual Studio oder an einer Befehlszeile erstellt werden kann (auch wenn Visual StudioVisual Studio nicht installiert ist).This means that a managed project can be built in Visual StudioVisual Studio or at a command prompt (even if Visual StudioVisual Studio isn't installed), and the results will be identical.

Ein Tutorial zur Verwendung von MSBuild in Visual Studio finden Sie unter Exemplarische Vorgehensweise: Verwenden von MSBuild.For a tutorial about how to use MSBuild in Visual Studio, see Walkthrough: Using MSBuild.

Festlegen von ZielversionenMultitargeting

Mit Visual Studio können Sie eine Anwendung zur Ausführung in verschiedenen Versionen von .NET Framework kompilieren.By using Visual Studio, you can compile an application to run on any one of several versions of the .NET Framework. Beispielsweise können Sie die gleiche Anwendung für die Ausführung in .NET Framework 2.0 auf einer 32-Bit-Plattform und für die Ausführung in .NET Framework 4.5 auf einer 64-Bit-Plattform kompilieren.For example, you can compile an application to run on the .NET Framework 2.0 on a 32-bit platform, and you can compile the same application to run on the .NET Framework 4.5 on a 64-bit platform. Die Möglichkeit, für mehr als ein Framework zu kompilieren, wird Festlegung von Zielversionen genannt.The ability to compile to more than one framework is named multitargeting.

In Folgenden sind einige Vorteile der Festlegung auf mehrere Zielversionen aufgeführt:These are some of the benefits of multitargeting:

  • Sie können Anwendungen entwickeln, die auf frühere Versionen von .NET Framework abzielen, z. B. Version 2.0, 3.0 oder 3.5.You can develop applications that target earlier versions of the .NET Framework, for example, versions 2.0, 3.0, and 3.5.

  • Sie können neben .NET Framework auch auf andere Frameworks abzielen, z. B. auf das Silverlight-Framework.You can target frameworks other than the .NET Framework, for example, Silverlight.

  • Sie können auf ein Frameworkprofil abzielen, das einer vordefinierten Teilmenge eines Zielframeworks entspricht.You can target a framework profile, which is a predefined subset of a target framework.

  • Sie können ebenfalls auf neu veröffentlichte Service Packs für die aktuelle .NET Framework-Version abzielen.If a service pack for the current version of the .NET Framework is released, you could target it.

  • Durch die Festlegung von Zielversionen wird garantiert, dass von einer Anwendung nur die im Zielframework und die auf der Zielplattform verfügbaren Funktionen verwendet werden.Multitargeting guarantees that an application uses only the functionality that's available in the target framework and platform.

Weitere Informationen finden Sie unter Multitargeting (Festlegen von Zielversionen).For more information, see Multitargeting.

Siehe auchSee also

TitelTitle BESCHREIBUNGDescription
Exemplarische Vorgehensweise: Erstellen einer neuen MSBuild-ProjektdateiWalkthrough: Creating an MSBuild project file from scratch Hier wird veranschaulicht, wie eine Projektbasisdatei nur mit einem Texteditor inkrementell erstellt wird.Shows how to create a basic project file incrementally, by using only a text editor.
Exemplarische Vorgehensweise: Verwenden von MSBuildWalkthrough: Using MSBuild Die Bausteine von MSBuild werden eingeführt, und es wird gezeigt, wie MSBuild-Projekte erstellt, bearbeitet und debuggt werden, ohne die Visual Studio-IDE zu schließen.Introduces the building blocks of MSBuild and shows how to write, manipulate, and debug MSBuild projects without closing the Visual Studio IDE.
MSBuild-GrundlagenMSBuild concepts Stellt die vier Bausteine von MSBuild dar: Eigenschaften, Elemente, Ziele und Aufgaben.Presents the four building blocks of MSBuild: properties, items, targets, and tasks.
ElementeItems Hierin werden die allgemeinen Konzepte hinter dem MSBuildMSBuild-Dateiformat sowie das Zusammenwirken der einzelnen Teile beschrieben.Describes the general concepts behind the MSBuildMSBuild file format and how the pieces fit together.
MSBuild-EigenschaftenMSBuild properties Hierin werden Eigenschaften und Eigenschaftenauflistungen eingeführt.Introduces properties and property collections. Eigenschaften sind Schlüssel/Wert-Paare, die zur Konfiguration von Builds verwendet werden können.Properties are key/value pairs that can be used to configure builds.
ZieleTargets Es wird erläutert, wie Aufgaben in einer bestimmten Reihenfolge gruppiert werden und wie Sie es ermöglichen, dass Abschnitte des Buildprozesses über die Befehlszeile aufgerufen werden.Explains how to group tasks together in a particular order and enable sections of the build process to be called on the command line.
AufgabenTasks Hierin wird gezeigt, wie eine Einheit von ausführbarem Code erstellt wird, die von MSBuildMSBuild zum Ausführen unteilbarer Buildvorgänge verwendet werden kann.Shows how to create a unit of executable code that can be used by MSBuildMSBuild to perform atomic build operations.
Conditions (MSBuild-Bedingungen)Conditions Hier wird erläutert, wie das Condition-Attribut in einem MSBuild-Element verwendet wird.Discusses how to use the Condition attribute in an MSBuild element.
Weiterführende KonzepteAdvanced concepts Hier werden die Batchverarbeitung, das Ausführen von Transformationen, die Festlegung von Zielversionen sowie andere erweiterte Verfahren veranschaulicht.Presents batching, performing transforms, multitargeting, and other advanced techniques.
Protokollierung in MSBuildLogging in MSBuild Hier wird erläutert, wie Buildereignisse, Meldungen, Fehler protokolliert werden.Describes how to log build events, messages, and errors.
Zusätzliche RessourcenAdditional resources Hierin werden Community- und Unterstützungsressourcen für weitere Informationen zu MSBuild aufgeführt.Lists community and support resources for more information about MSBuild.

ReferenzReference