Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält eine Übersicht über Anpassungsoptionen für Builds und Empfehlungen für die Anwendung der jeweiligen Ansätze. Die Optionen werden in der Reihenfolge der Komplexität dargestellt, von Befehlszeilenargumenten bis hin zu systemweiten Anpassungen.
Voraussetzungen
- Vertrautheit mit der MSBuild-Projektdateistruktur (
.csproj,.vbprojoder ähnlich) - Grundlegendes Verständnis von MSBuild-Eigenschaften und Zielen
Überblick
MSBuild-Projekte, die den Standardmäßigen Buildprozess verwenden (Importieren von Microsoft.Common.props und Microsoft.Common.targets) verfügen über mehrere Erweiterbarkeits-Hooks, mit denen Sie Ihren Buildprozess anpassen können.
Viele anpassbare Buildvorgänge werden durch Eigenschaften gesteuert. Es ist wichtig zu wissen, wie und wo ein Eigenschaftswert festgelegt werden soll, um den gewünschten Effekt zu erzielen. Sie können Eigenschaften für die 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 die Reihenfolge importierter Dateien, einschließlich impliziter Importe aus SDKs wie dem .NET SDK.
Eine Liste der Eigenschaften finden Sie unter "ALLGEMEINE MSBuild-Eigenschaften".
Erkunden von Anpassungsoptionen
Die folgenden Anpassungsoptionen werden aufgelistet, um die Komplexität und den Einflussumfang zu erhöhen. Es wird empfohlen, die am wenigsten komplexe Anpassungsoption zu verwenden, die Ihren Zweck erfüllt, beginnend am Anfang dieser Liste.
| Anpassungsoption | Description |
|---|---|
| Hinzufügen von Argumenten zur Befehlszeile MSBuild | Legen Sie globale Eigenschaften fest, die sich auf den Hauptprojektbuild und die Builde aller abhängigen Projekte auswirken. |
| Anpassen des Builds für ein einzelnes Projekt | Fügen Sie Eigenschaften zu .props- oder .targets-Dateien hinzu, um die Build-Einstellungen anzupassen. |
| Behandeln generierter Dateien im Buildprozess | Stellen Sie sicher, dass Die generierten Dateien im Build ordnungsgemäß enthalten sind. |
| Anpassen des Builds für ein oder mehrere Projekte | Fügen Sie Eigenschaften zu Directory.Build.props hinzu, oder fügen Sie Eigenschaften und Ziele zu Directory.Build.targets hinzu, um den Build für alle Projekte unter einem Ordner anzupassen. Diese Technik ist nützlich zum Festlegen von Eigenschaften, die von einem SDK festgelegt oder verwendet werden, sowie zum Festlegen von Anpassungen, sodass sie sich auf alle Projekte in einem Ordner oder Unterordner auswirken. |
| Anpassen Ihres lokalen Builds | Nehmen Sie Änderungen am Build direkt auf Ihrem lokalen Computer vor, ohne dass sich dies auf freigegebene Quelldateien auswirkt. |
| Anpassen der Lösungserstellung | Passen Sie das Buildverhalten auf Lösungsebene und übergeordnet auf Projektebene an, sowohl vor als auch nach einzelnen Projektbuilds. |
| Anpassen von .NET-Builds | Passen Sie den Build mit systemweitem Umfang für .NET-Builds an. |
| Anpassen von C++-Builds | Passen Sie den C++-Build an, der auf ein Projekt, eine Projektmappe, einen Ordner oder alle Builds ausgerichtet ist, die von einer Installation von MSBuild auf einem System gesteuert werden. |
Hinzufügen von Argumenten zu Befehlszeilen-MSBuild-Aufrufen für Ihr Projekt
Sie können globale Eigenschaften in der Befehlszeile festlegen. Globale Eigenschaften beeinflussen alle Projekt-Builds, einschließlich der 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, abhängige Projekte zu bauen, die nicht auf dem aktuellen Stand sind. Diese abhängigen Projektbuilds werden mit den gleichen globalen Eigenschafteneinstellungen über die Befehlszeile wie das ursprüngliche Projekt gestartet.
Eine Directory.Build.rsp-Datei in oder oberhalb Ihres Quellverzeichnisses wird auf Befehlszeilenbuilds Ihres Projekts angewendet. Ausführliche Informationen finden Sie unter MSBuild-Antwortdateien.
Wählen Sie zwischen dem Hinzufügen von Eigenschaften zu einer .props-Datei oder einer .targets-Datei.
MSBuild ist abhängig von der Importreihenfolge, und die letzte Definition einer Eigenschaft (oder eines UsingTask oder Ziels) ist die verwendete Definition.
Bei Verwendung expliziter Importe können Sie jederzeit aus .props oder .targets importieren. Dies ist die häufig verwendete Konvention:
.propsDateien werden früh in der Importreihenfolge importiert..targetsDateien werden spät in der Buildreihenfolge importiert.
Diese Konvention wird durch <Project Sdk="SdkName"> importe erzwungen (d. h. der Import von Sdk.props kommt zuerst, bevor alle Inhalte der Datei, dann Sdk.targets kommt zuletzt, nach allen Inhalten der Datei).
Wenn Sie entscheiden, wo die Eigenschaften platziert werden sollen, verwenden Sie die folgenden allgemeinen Richtlinien:
Bei vielen Eigenschaften spielt es keine Rolle, wo sie definiert sind, da sie nicht überschrieben werden und zur Ausführungszeit schreibgeschützt sind.
Legen Sie für Verhalten, das in einem einzelnen Projekt angepasst werden kann, Standardwerte in
.propsDateien fest.Vermeiden Sie das Festlegen abhängiger Eigenschaften in
.propsDateien, 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
.targetsDateien fest, da sie Anpassungen aus einzelnen Projekten abrufen.Wenn Sie Eigenschaften außer Kraft setzen müssen, tun Sie dies in einer
.targetsDatei, nachdem alle Benutzerprojektanpassungen die Möglichkeit hatten, wirksam zu werden. Seien Sie vorsichtig, wenn Sie abgeleitete Eigenschaften verwenden; abgeleitete Eigenschaften müssen möglicherweise ebenfalls überschrieben werden.Elemente in
.propsDateien einbeziehen (abhängig von einer Eigenschaft). Alle Eigenschaften werden vor jedem Element berücksichtigt, sodass Anpassungen von Benutzer-Projekteigenschaften übernommen werden und importierte Elemente in.props-Dateien dem Projekt des Benutzers die Möglichkeit geben, ein Element zuRemoveoder zuUpdate, das durch den Import eingefügt wurde.Definieren sie Ziele in
.targetsDateien. Wenn die.targetsDatei jedoch von einem SDK importiert wird, denken Sie daran, dass dieses Szenario das Überschreiben des Ziels erschwert, da das Projekt des Benutzers nicht standardmäßig außer Kraft gesetzt werden kann.Wenn möglich, bevorzugen Sie das Anpassen von Eigenschaften zur Auswertungszeit gegenüber dem Ändern von Eigenschaften innerhalb eines Ziels. Diese Richtlinie erleichtert das Laden eines Projekts und das Verständnis dessen, was es tut.