Freigeben über


Integration in Visual Studio (MSBuild)

Visual Studio hostet MSBuild zum Laden und Erstellen verwalteter Projekte. Da MSBuild für das Projekt verantwortlich ist, kann nahezu jedes Projekt im MSBuild-Format in Visual Studio erfolgreich verwendet werden, auch wenn das Projekt von einem anderen Tool erstellt wurde und über einen angepassten Buildprozess verfügt.

In diesem Artikel werden bestimmte Aspekte des MSBuild-Hostings von Visual Studio beschrieben, die beim Anpassen von Projekten und ZIELdateien berücksichtigt werden sollten, die Sie in Visual Studio laden und erstellen möchten. Dadurch können Sie sicherstellen, dass Visual Studio-Features wie IntelliSense und Debuggen für Ihr benutzerdefiniertes Projekt funktionieren.

Informationen zu C++-Projekten finden Sie unter Project-Dateien.

Dateinamenserweiterungen

MSBuild.exe erkennt jede Projektdateierweiterung, die dem Muster .*proj entspricht. Visual Studio erkennt jedoch nur eine Teilmenge dieser Projektdateierweiterungen, die das sprachspezifische Projektsystem bestimmen, das das Projekt lädt. Visual Studio verfügt nicht über ein sprachneutrales MSBuild-basiertes Projektsystem.

Beispielsweise lädt das C#-Projektsystem CSPROJ-Dateien , visual Studio kann jedoch keine xxproj-Datei laden. Eine Projektdatei für Quelldateien in einer beliebigen Sprache muss dieselbe Erweiterung wie Visual Basic- oder C#-Projektdateien verwenden, um in Visual Studio geladen zu werden.

Alternativ wird die Erweiterung *.msbuildproj unterstützt.

Bekannte Zielnamen

Durch Klicken auf den Befehl "Erstellen" in Visual Studio wird das Standardziel im Projekt ausgeführt. Häufig wird dieses Ziel auch Build genannt. Wenn Sie den Befehl "Neu erstellen " oder " Bereinigen " auswählen, wird versucht, ein Ziel desselben Namens im Projekt auszuführen. Wenn Sie auf "Veröffentlichen" klicken, wird ein Im Projekt benanntes PublishOnly Ziel ausgeführt.

Konfigurationen und Plattformen

Konfigurationen werden in MSBuild-Projekten durch Eigenschaften dargestellt, die in einem PropertyGroup Element gruppiert sind, das ein Condition Attribut enthält. Visual Studio untersucht diese Bedingungen, um eine Liste der anzuzeigenden Projektkonfigurationen und -plattformen zu erstellen. Um diese Liste erfolgreich zu extrahieren, müssen die Bedingungen ein ähnliches Format wie folgt aufweisen:

Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' " 
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "

Visual Studio untersucht zu diesem Zweck die Bedingungen für PropertyGroup, ItemGroup, Import, Eigenschaften und Elemente.

Zusätzliche Buildaktionen

Mit Visual Studio können Sie den Elementtypnamen einer Datei in einem Projekt mit der BuildAktion-Eigenschaft des Dateieigenschaftenfensters ändern. Compile-, EmbeddedResource-, Content- und None-Elementtypnamen werden immer in diesem Menü aufgeführt, ebenso wie alle anderen Elementtypen, die bereits in Ihrem Projekt enthalten sind. Um sicherzustellen, dass alle benutzerdefinierten Elementtypnamen immer in diesem Menü verfügbar sind, können Sie die Namen einem Elementtyp namens AvailableItemNamehinzufügen. Wenn Sie ihrer Projektdatei beispielsweise Folgendes hinzufügen, wird diesem Menü der benutzerdefinierte Typ JScript für alle Projekte hinzugefügt, die sie importieren:

<ItemGroup>
    <AvailableItemName Include="JScript"/>
</ItemGroup>

Durch das Hinzufügen von Elementtypnamen zum AvailableItemName Elementtyp werden Elemente dieses Typs im Projektmappen-Explorer angezeigt.

Hinweis

Einige Elementtypnamen sind speziell für Visual Studio, aber nicht in dieser Dropdownliste aufgeführt.

In-Process-Compiler

Wenn möglich, versucht Visual Studio, die prozessinterne Version des Visual Basic-Compilers für eine höhere Leistung zu verwenden. (Gilt nicht für C#.) Damit dies ordnungsgemäß funktioniert, müssen die folgenden Bedingungen erfüllt sein:

  • In einem Ziel des Projekts muss es eine Aufgabe geben, die für Visual Basic-Projekte benannt Vbc ist.

  • Der UseHostCompilerIfAvailable Parameter des Vorgangs muss auf "true" festgelegt werden.

Entwicklungszeit IntelliSense

Um Unterstützung durch IntelliSense in Visual Studio zu erhalten, bevor ein Build eine Ausgabe-Assembly generiert hat, müssen die folgenden Bedingungen erfüllt sein:

  • Es muss ein Ziel mit dem Namen Compilevorhanden sein.

  • Entweder muss das Compile-Ziel oder eine seiner Abhängigkeiten die Compileraufgabe für das Projekt aufrufen, z. B. mittels Csc oder Vbc.

  • Entweder das Compile Ziel oder eine seiner Abhängigkeiten müssen dazu führen, dass der Compiler alle erforderlichen Parameter für IntelliSense empfängt, insbesondere alle Verweise.

  • Die im Abschnitt " In-Process-Compiler" aufgeführten Bedingungen müssen erfüllt sein.

Erstellen von Lösungen

In Visual Studio werden die Lösungsdatei und die Projektbuild-Reihenfolge von Visual Studio selbst gesteuert. Beim Erstellen einer Lösung mit msbuild.exe in der Befehlszeile analysiert MSBuild die Lösungsdatei und sortiert die Projektbuilds. In beiden Fällen werden die Projekte einzeln in Abhängigkeitsreihenfolge erstellt, und Projekt-zu-Projektverweise werden nicht durchlaufen. Wenn jedoch einzelne Projekte mit msbuild.exeerstellt werden, werden Projekt-zu-Projektverweise durchlaufen.

Beim Erstellen in Visual Studio wird die Eigenschaft $(BuildingInsideVisualStudio) auf true. Dies kann in Ihrem Projekt oder . targets-Dateien verwendet werden, um zu bewirken, dass sich der Build anders verhält.

Anzeigen von Eigenschaften und Elementen

Visual Studio erkennt bestimmte Eigenschaftsnamen und -werte. Die folgende Eigenschaft in einem Projekt bewirkt beispielsweise, dass die Windows-Anwendung im Feld "Anwendungstyp " im Projekt-Designer angezeigt wird.

<OutputType>WinExe</OutputType>

Der Eigenschaftswert kann im Project Designer bearbeitet und in der Projektdatei gespeichert werden. Wenn eine solche Eigenschaft durch die Handbearbeitung einen ungültigen Wert erhält, zeigt Visual Studio beim Laden des Projekts eine Warnung an und ersetzt den ungültigen Wert durch einen Standardwert.

Visual Studio versteht Standardwerte für einige Eigenschaften. Diese Eigenschaften werden nicht in der Projektdatei gespeichert, es sei denn, sie haben keine Standardwerte.

Eigenschaften mit beliebigen Namen werden in Visual Studio nicht angezeigt. Um beliebige Eigenschaften in Visual Studio zu ändern, müssen Sie die Projektdatei im XML-Editor öffnen und manuell bearbeiten. Weitere Informationen finden Sie im Abschnitt "Projektdateien bearbeiten" in Visual Studio weiter unten in diesem Thema.

Elemente, die im Projekt mit beliebigen Elementtypnamen definiert sind, werden standardmäßig im Projektmappen-Explorer unter ihrem Projektknoten angezeigt. Um ein Element aus der Anzeige auszublenden, legen Sie die Visible Metadaten auf false. Beispielsweise nimmt das folgende Element am Buildprozess teil, wird aber nicht im Solution Explorer angezeigt.

<ItemGroup>
    <IntermediateFile Include="cache.temp">
        <Visible>false</Visible>
    </IntermediateFile>
</ItemGroup>

Hinweis

Die Visible Metadaten werden von Solution Explorer für C++-Projekte ignoriert. Elemente werden immer angezeigt, selbst wenn Visible auf "false" gesetzt ist.

Elemente, die in in dem Projekt importierten Dateien deklariert sind, werden standardmäßig nicht angezeigt. Elemente, die während des Buildvorgangs erstellt wurden, werden nie im Projektmappen-Explorer angezeigt.

Bedingungen für Elemente und Eigenschaften

Während eines Builds werden alle Bedingungen vollständig eingehalten.

Beim Bestimmen der anzuzeigenden Eigenschaftswerte werden eigenschaften, die Visual Studio als vom Konfigurationsabhängigen betrachtet, anders ausgewertet als eigenschaften, die von der Konfiguration unabhängig betrachtet werden. Für Eigenschaften, die von der Konfiguration abhängig sind, legt Visual Studio die Configuration Eigenschaften Platform entsprechend fest und weist MSBuild an, das Projekt neu auszuwerten. Für Eigenschaften, die die Konfiguration unabhängig betrachtet, ist es unbestimmt, wie Bedingungen ausgewertet werden.

Bedingte Ausdrücke für Elemente werden immer ignoriert, um zu entscheiden, ob das Element im Projektmappen-Explorer angezeigt werden soll.

Fehlersuche

Um die Ausgabe-Assembly zu suchen und zu starten und den Debugger anzufügen, benötigt Visual Studio die Eigenschaften OutputPath, AssemblyName und OutputType ordnungsgemäß definiert. Der Debugger kann nicht angehängt werden, wenn der Build-Prozess den Compiler nicht veranlasst hat, eine PDB-Datei zu erstellen.

Ausführung des Entwurfszeitziels

Visual Studio versucht, Ziele mit bestimmten Namen auszuführen, wenn ein Projekt geladen wird. Zu diesen Zielen gehören Compile, ResolveAssemblyReferences, ResolveCOMReferences, GetFrameworkPaths und CopyRunEnvironmentFiles. Visual Studio führt diese Ziele aus, damit der Compiler initialisiert werden kann, um IntelliSense bereitzustellen, der Debugger kann initialisiert werden, und verweise, die im Projektmappen-Explorer angezeigt werden, können aufgelöst werden. Wenn diese Ziele nicht vorhanden sind, wird das Projekt ordnungsgemäß geladen und erstellt, aber die Entwurfszeit-Erfahrung in Visual Studio ist nicht vollständig funktionsfähig.

Bearbeiten von Projektdateien in Visual Studio

Um ein MSBuild-Projekt direkt zu bearbeiten, können Sie die Projektdatei im Visual Studio XML-Editor öffnen.

So entladen und bearbeiten Sie eine Projektdatei in Visual Studio

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie dann "Projekt entladen" aus.

    Das Projekt ist markiert (nicht verfügbar).

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den nicht verfügbaren Projektknoten, und wählen Sie dann "Projektdatei< bearbeiten" >aus.

    Die Projektdatei wird im XML-Editor von Visual Studio geöffnet.

  3. Bearbeiten, speichern und schließen Sie dann die Projektdatei.

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den nicht verfügbaren Projektknoten, und wählen Sie dann "Projekt erneut laden" aus.

IntelliSense und Validierung

Wenn Sie den XML-Editor zum Bearbeiten von Projektdateien verwenden, wird IntelliSense und Validierung von den MSBuild-Schemadateien gesteuert. Diese werden im Schemacache installiert, die sich im <Visual Studio-Installationsverzeichnis>\Xml\Schemas\1033\MSBuild befindet.

Die wichtigsten MSBuild-Typen werden in Microsoft.Build.Core.xsd definiert, und allgemeine Typen, die von Visual Studio verwendet werden, werden in Microsoft.Build.CommonTypes.xsd definiert. Um die Schemas so anzupassen, dass Sie IntelliSense und validierung für benutzerdefinierte Elementtypnamen, Eigenschaften und Aufgaben haben, können Sie entweder Microsoft.Build.xsd bearbeiten oder ein eigenes Schema erstellen, das die CommonTypes oder Core-Schemas enthält. Wenn Sie ein eigenes Schema erstellen, müssen Sie den XML-Editor anweisen, es mithilfe des Eigenschaftenfensters zu finden.

Geladene Projektdateien bearbeiten

Visual Studio speichert den Inhalt von Projektdateien und Von Projektdateien importierten Dateien zwischen. Wenn Sie eine geladene Projektdatei bearbeiten, fordert Visual Studio Sie automatisch auf, das Projekt neu zu laden, damit die Änderungen wirksam werden. Wenn Sie jedoch eine von einem geladenen Projekt importierte Datei bearbeiten, wird keine Aufforderung zum Erneutladen angezeigt, und Sie müssen das Projekt manuell entladen und neu laden, damit die Änderungen wirksam werden.

Ausgabegruppen

Mehrere in Microsoft.Common.targets definierte Ziele haben Namen, die in OutputGroups oder OutputGroupDependenciesenden. Visual Studio ruft diese Ziele auf, um bestimmte Listen von Projektausgaben abzurufen. Beispielsweise erstellt das SatelliteDllsProjectOutputGroup Ziel eine Liste aller Satellitenassemblys, die von einem Build generiert werden. Diese Ausgabegruppen werden von Features wie Veröffentlichung, Bereitstellung und Projekt-zu-Projekt-Verweise verwendet. Projekte, die sie nicht definieren, werden in Visual Studio geladen und erstellt, aber einige Features funktionieren möglicherweise nicht ordnungsgemäß.

Referenzauflösung

Die Referenzauflösung ist der Prozess der Verwendung der in einer Projektdatei gespeicherten Referenzelemente zum Auffinden tatsächlicher Assemblys. Visual Studio muss die Referenzauflösung auslösen, um detaillierte Eigenschaften für jeden Verweis im Eigenschaftenfenster anzuzeigen. In der folgenden Liste werden die drei Arten von Verweisen und deren Auflösung beschrieben.

  • Assembly-Verweise

    Das Projektsystem ruft ein Ziel mit dem bekannten Namen ResolveAssemblyReferencesauf. Dieses Ziel sollte Elemente mit dem Elementtypnamen ReferencePatherzeugen. Jedes dieser Elemente sollte über eine Elementspezifikation (den Wert des Attributs Include eines Elements) verfügen, die den vollständigen Pfad zum Verweis enthält. Die Elemente sollten alle Metadaten der Eingabeelemente enthalten und zusätzlich mit den folgenden neuen Metadaten versehen werden:

    • CopyLocal, der angibt, ob die Assembly in den Ausgabeordner kopiert werden soll, und auf true oder false gesetzt wird.

    • OriginalItemSpec, der die ursprüngliche Elementspezifikation des Verweises enthält.

    • ResolvedFrom, legen Sie auf "{TargetFrameworkDirectory}" fest, wenn sie aus dem .NET Framework-Verzeichnis aufgelöst wurde.

  • COM-Verweise:

    Das Projektsystem ruft ein Ziel mit dem bekannten Namen ResolveCOMReferencesauf. Dieses Ziel sollte Elemente mit dem Elementtypnamen ComReferenceWrapperserzeugen. Jedes dieser Elemente sollte über eine Elementspezifikation verfügen, die den vollständigen Pfad zur Interop-Assembly für die COM-Referenz enthält. Die Elemente sollten alle Metadaten aus den übergebenen Eingabeelementen enthalten, zusätzlich zu neuen Metadaten mit dem Namen CopyLocal, die angeben, ob die Assembly in den Ausgabeordner kopiert werden soll, auf "true" oder "false" festgelegt ist.

  • Native Verweise

    Das Projektsystem ruft ein Ziel mit dem bekannten Namen ResolveNativeReferencesauf. Dieses Ziel sollte Elemente mit dem Elementtypnamen NativeReferenceFileerzeugen. Die Elemente sollten über alle Metadaten der Eingabeelemente verfügen, die zusätzlich zu einem neuen Metadatenelement mit dem Namen OriginalItemSpecübergeben werden, das die ursprüngliche Elementspezifikation des Verweises enthält.

Leistungsoptimierungen

Wenn Sie die Visual Studio-IDE verwenden, um das Debuggen zu starten (entweder durch Auswählen der F5-Taste oder durch Auswählen von Debug>Debugging starten auf der Menüleiste) oder um Ihr Projekt zu erstellen (z. B. Erstellen>Lösung erstellen), verwendet der Buildprozess eine schnelle Updateüberprüfung, um die Leistung zu verbessern. In einigen Fällen, in denen angepasste Builds Dateien erstellen, die wiederum erstellt werden, identifiziert die Schnellaktualisierungsprüfung die geänderten Dateien nicht ordnungsgemäß. Projekte, die gründlichere Aktualisierungsprüfungen benötigen, können die schnelle Überprüfung deaktivieren, indem Sie die Umgebungsvariable DISABLEFASTUPTODATECHECK=1festlegen. Alternativ können Projekte dies als MSBuild-Eigenschaft im Projekt oder in einer Datei festlegen, die das Projekt importiert.