Anpassen Ihres Builds
MSBuild-Projekte, die den Standardbuildprozess verwenden und Microsoft.Common.props und Microsoft.Common.targets importieren, beinhalten einige Erweiterungsmöglichkeiten, die zum Anpassen Ihres Buildprozesses verwendet werden können.
Viele anpassbare Buildvorgänge werden durch Eigenschaften gesteuert. Es ist wichtig zu wissen, wie und wo ein Eigenschaftswert festgelegt werden muss, um den gewünschten Effekt zu erzielen. Sie können Eigenschaften in der Befehlszeile (und in Antwortdateien), in speziellen Dateien wie Directory.Build.props, in importierten Dateien oder in der Projektdatei festlegen. Es ist wichtig, zu wissen, wo eine Eigenschaft verwendet, festgelegt oder geändert wird und in welcher Reihenfolge die importierten Dateien verwendet werden, einschließlich impliziter Importe aus SDKs wie dem .NET SDK.
Eine Liste der Eigenschaften finden Sie unter Gemeinsame MSBuild-Projekteigenschaften.
Erkunden der Anpassungsoptionen
Die folgenden Anpassungsoptionen sind in aufsteigender Reihenfolge nach ihrer Komplexität und ihren möglichen Auswirkungen aufgeführt. Wir empfehlen die Verwendung der am wenigsten komplexen Anpassungsoption, die Ihren Zweck erfüllt, beginnend am Anfang dieser Liste.
Anpassungsoption | BESCHREIBUNG |
---|---|
Hinzufügen von Argumenten zur MSBuild-Befehlszeile | Legen Sie globale Eigenschaften fest, die sich auf den Hauptprojektbuild und Builds aller abhängigen Projekte auswirken. |
Anpassen des Builds für ein einzelnes Projekt | Fügen Sie .props - oder .targets -Dateien Eigenschaften hinzu, um Buildeinstellungen anzupassen. |
Verarbeiteten von generierten Dateien im Buildprozess | Stellen Sie sicher, dass Ihre generierten Dateien korrekt in die Buildausgabe eingeschlossen werden. |
Anpassen des Builds für ein oder mehrere Projekte | Fügen Sie Directory.Build.props Eigenschaften hinzu, oder fügen Sie Directory.Build.targets Eigenschaften und Ziele hinzu, um den Build für alle Projekte in einem Ordner anzupassen. Diese Vorgehensweise eignet sich zum Festlegen von Eigenschaften, die von einem SDK festgelegt oder verwendet werden, und zum Definieren des Bereichs von Anpassungen, damit diese auf alle Projekte in einem Ordner oder Unterordner angewendet werden. |
Anpassen des lokalen Builds | Nehmen Sie nur auf Ihrem lokalen Computer Änderungen am Build vor, ohne dass sich diese auf freigegebene Quelldateien auswirken. |
Anpassen aller .NET-Builds | Passen Sie den Build systemweit für .NET-Builds an. |
Anpassen von C++-Builds | Passen Sie den C++-Build für ein Projekt, eine Projektmappe, einen Ordner oder alle Builds an, die von einer MSBuild-Installation auf einem System gesteuert werden. |
Hinzufügen von Argumenten zu MSBuild-Aufrufen Ihres Projekts über die Befehlszeile
Sie können globale Eigenschaften in der Befehlszeile festlegen. Globale Eigenschaften wirken sich auf alle Projektbuilds aus, einschließlich Abhängigkeiten. Denken Sie daran, dass das Erstellen eines Projekts automatisch einen möglichen Build für alle Projektabhängigkeiten auslöst. Das normale Verhalten von MSBuild besteht darin, auch Builds abhängiger Projekte zu erstellen, die veraltet sind. Diese abhängigen Projektbuilds werden über die Befehlszeile mit den gleichen globalen Eigenschaftseinstellungen gestartet wie das ursprüngliche Projekt.
Es wird eine Directory.Build.rsp-Datei innerhalb oder oberhalb des Quellverzeichnisses auf die Builds des Projekts über die Befehlszeile angewendet. Weitere Einzelheiten finden Sie unter MSBuild-Antwortdateien.
Wählen Sie zwischen dem Hinzufügen von Eigenschaften zu einer .props
- oder .targets
-Datei.
MSBuild ist von der Importreihenfolge abhängig, sodass die letzte Definition einer Eigenschaft (oder von UsingTask
oder eines Ziels) die verwendete Definition ist.
Wenn Sie explizite Importe verwenden, können Sie Daten jederzeit aus einer .props
- oder .targets
-Datei importieren. Hier ist die weit verbreitete Konvention:
.props
-Dateien werden zu einem frühen Zeitpunkt in der Importreihenfolge importiert..targets
-Dateien werden später in der Buildreihenfolge importiert.
Diese Konvention wird durch <Project Sdk="SdkName">
-Importe erzwungen (d.h. der Import von Sdk.props erfolgt zuerst vor dem gesamten Inhalt der Datei. Sdk.targets kommt zuletzt nach dem gesamten Inhalt der Datei).
Befolgen Sie bei der Entscheidung, wo Sie die Eigenschaften platzieren möchten, die folgenden allgemeinen Leitlinien:
Bei vielen Eigenschaften spielt es keine Rolle, wo sie definiert werden, da sie nicht überschrieben und nur zur Ausführungszeit gelesen werden.
Für Verhalten, die in einem einzelnen Projekt angepasst werden können, legen Sie in
.props
-Dateien Standardwerte fest.Vermeiden Sie es, abhängige Eigenschaften in
.props
-Dateien festzulegen, indem Sie den Wert einer möglicherweise angepassten Eigenschaft lesen, da die Anpassung erst erfolgt, wenn MSBuild das Projekt des Benutzers liest.Legen Sie abhängige Eigenschaften in
.targets
-Dateien fest, da bei ihnen Anpassungen aus einzelnen Projekten übernommen werden.Wenn Sie Eigenschaften überschreiben müssen, tun Sie dies in einer
.targets
-Datei, nachdem alle Anpassungen am Benutzerprojekt wirksam werden konnten. Seien Sie vorsichtig bei der Verwendung abgeleiteter Eigenschaften, da diese möglicherweise ebenfalls überschrieben werden müssen.Fügen Sie Elemente in
.props
-Dateien (abhängig von einer Eigenschaft) ein. Alle Eigenschaften werden vor jedem Element berücksichtigt. Deshalb werden Anpassungen der Eigenschaften des Benutzerprojekts übernommen. Durch importierte Elemente in.props
erhält das Projekt des Benutzers die Möglichkeit, die VorgängeRemove
oderUpdate
auf jedes durch den Import eingeführte Element anzuwenden.Definieren Sie Ziele in
.targets
-Dateien. Wenn die.targets
-Datei jedoch durch ein SDK importiert wird, denken Sie daran, dass dieses Szenario das Überschreiben des Ziels erschwert, da das Projekt des Benutzers standardmäßig keine Möglichkeit hat, es zu überschreiben.Bevorzugen Sie nach Möglichkeit die Anpassung von Eigenschaften zur Evaluierungszeit gegenüber der Änderung von Eigenschaften innerhalb eines Ziels. Diese Leitlinie erleichtert das Laden eines Projekts und das Verstehen seiner Aktivitäten.