Freigeben über


Integration von Visual Studio (MSBuild)

Visual Studio MSBuild hostet, um verwaltete Projekte zu laden und zu erstellen.Da das Projekt über MSBuild ausgeführt wird, können nahezu alle Projekte im Format von MSBuild in Visual Studio erfolgreich verwendet werden, selbst wenn das Projekt über ein anderes Tool erstellt wurde und über einen angepassten Buildprozess verfügt.

In diesem Thema werden bestimmte Aspekte von MSBuild in Visual Studio erläutert, die beim Anpassen von Projekten und TARGETS-Dateien berücksichtigt werden sollten, die Sie in Visual Studio laden und erstellen möchten.Dadurch können Sie Visual Studio-Funktionen wie IntelliSense sowie Debugging in Ihrem benutzerdefinierten Projekt einsetzen.

Projektdateierweiterungen

MSBuild.exe erkennt jede Projektdateierweiterung, die dem Muster .*proj entspricht.Visual Studio erkennt jedoch nur eine Untergruppe dieser Projektdateierweiterungen, über die das zum Laden des Projekts verwendete sprachspezifische Projektsystem festgelegt wird.Visual Studio verfügt nicht über ein sprachunabhängiges MSBuild-basiertes Projektsystem.

Über das Visual C#-Projektsystem können z. B. CSPROJ-Dateien geladen werden, in Visual Studio können hingegen keine XXPROJ-Dateien geladen werden.Bei einer Projektdatei für Quelldateien in einer beliebigen Sprache muss die gleiche Erweiterung verwendet werden wie bei den Projektdateien von Visual Basic oder Visual C#, die in Visual Studio geladen werden sollen.

Bekannte Zielnamen

Durch Klicken auf den Befehl Erstellen in Visual Studio wird das Standardziel im Projekt ausgeführt.Häufig wird dieses Ziel auch als Build bezeichnet.Durch Auswählen des Befehls Neu erstellen oder Bereinigen wird versucht, im Projekt ein Ziel mit dem gleichen Namen auszuführen.Durch Klicken auf Veröffentlichen wird das Ziel mit dem Namen PublishOnly ausgeführt.

Konfigurationen und Plattformen

Konfigurationen werden in MSBuild-Projekten durch Eigenschaften dargestellt, die in einem PropertyGroup-Element gruppiert werden, das ein Condition-Attribut enthält.Visual Studio prüft diese Bedingungen, um eine Liste der anzuzeigenden Projektkonfigurationen und Plattformen zu erstellen.Damit diese Liste erfolgreich extrahiert werden kann, müssen die Bedingungen in einem Format vorliegen, das dem folgenden Format ähnelt:

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

In Visual Studio werden zu diesem Zweck die Bedingungen für PropertyGroup, ItemGroup und Import sowie für die Eigenschaft und die Elemente überprüft.

Zusätzliche Buildvorgänge

In Visual Studio können Sie den Elementtypnamen einer Datei in einem Projekt über die Eigenschaft Buildvorgang im Fenster Dateieigenschaften ändern.In diesem Menü werden Compile, EmbeddedResource, Content und None sowie alle anderen bereits im Projekt vorhandenen Elementtypnamen aufgeführt.Um sicherzustellen, dass alle benutzerdefinierten Elementtypnamen in diesem Menü immer verfügbar sind, können Sie dem Elementtyp AvailableItemName die entsprechenden Namen hinzufügen.Durch Hinzufügen des folgenden Elements zur Projektdatei wird beispielsweise in diesem Menü der benutzerdefinierte Typ JScript für alle Projekte eingefügt, die diesen Typ importieren:

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

Einige Elementtypnamen sind spezifisch für Visual Studio, werden jedoch in diesem Dropdownmenü nicht aufgeführt.

Prozessinterne Compiler

Aus Gründen der Leistungssteigerung werden in Visual Studio nach Möglichkeit die prozessinternen Versionen des Visual Basic- und des Visual C#-Compilers verwendet.Dazu müssen die folgenden Bedingungen erfüllt sein:

  • Ein Ziel des Projekts muss die Aufgabe mit dem Namen Csc (bei Visual C#-Projekten) oder Vbc (bei Visual Basic-Projekten) enthalten.

  • Der UseHostCompilerIfAvailable-Parameter der Aufgabe muss auf true festgelegt sein.

  • Es dürfen nur unterstützte Parameterwerte angegeben werden.Mit dem prozessinternen Compiler werden alle in der Aufgabe angegebenen Parameter unterstützt, einige Parameterwerte werden jedoch nicht unterstützt.Die folgenden Parameterwerte der Csc-Aufgabe werden von dem prozessinternen Compiler in Visual C# nicht unterstützt:

    • NoConfig: false und leere Werte werden nicht unterstützt.

    • ResponseFiles: Nicht leere Werte werden nicht unterstützt.

    • AdditionalLibPaths: Nicht leere Werte werden nicht unterstützt.

    • AddModules: Nicht leere Werte werden nicht unterstützt.

    • CodePage: Werte ungleich 0 (null) werden nicht unterstützt.

    • GenerateFullPaths: true wird nicht unterstützt.

    • LinkResources: Nicht leere Werte werden nicht unterstützt.

Wenn diese Bedingungen nicht erfüllt sind, wird das Projekt über den Befehlszeilencompiler und nicht über den prozessinternen Compiler kompiliert.

IntelliSense zur Entwurfszeit

Zum Aufrufen der IntelliSense-Unterstützung in Visual Studio vor dem Generieren einer Ausgabeassembly in einem Build müssen die folgenden Bedingungen erfüllt sein:

  • Ein Ziel mit dem Namen Compile muss vorliegen.

  • Über das Compile-Ziel oder eine der zugehörigen Abhängigkeiten muss die Kompilieraufgabe für das Projekt aufgerufen werden, z. B. Csc oder Vbc.

  • Über das Compile-Ziel oder eine der zugehörigen Abhängigkeiten muss der Compiler so eingerichtet werden, dass alle erforderlichen Parameter für IntelliSense, vor allem alle Verweise, empfangen werden.

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

Erstellen von Projektmappen

In Visual Studio wird die Anordnung der Projektmappendateien und Projektbuilds über Visual Studio gesteuert.Beim Erstellen einer Projektmappe an der Befehlszeile mit msbuild.exe analysiert MSBuild die Projektmappendatei und ordnet die Projektbuilds an.In beiden Fällen werden die Projekte einzeln in der Reihenfolge der Abhängigkeiten erstellt. Gleichzeitig werden Verweise zwischen Projekten nicht durchlaufen.Wenn hingegen einzelne Projekte mit msbuild.exe erstellt werden, werden Verweise zwischen Projekten durchlaufen.

Beim Erstellen in Visual Studio wird die $(BuildingInsideVisualStudio)-Eigenschaft auf true festgelegt.Damit kann im Projekt oder in den TARGETS-Dateien festgelegt werden, dass der Build ein anderes Verhalten aufweist.

Anzeigen von Eigenschaften und Elementen

Visual Studio erkennt bestimmte Eigenschaftennamen und -werte.Über die folgende Eigenschaft in einem Projekt wird beispielsweise im Projekt-Designer im Feld Anwendungstyp die Option Windows-Anwendung angezeigt.

<OutputType>WinExe</OutputType>

Der Eigenschaftswert kann im Projekt-Designer bearbeitet und in der Projektdatei gespeichert werden.Wenn für diese Eigenschaft beim Bearbeiten ein ungültiger Wert angegeben wird, wird in Visual Studio beim Laden des Projekts eine Warnmeldung angezeigt, und der ungültige Wert wird durch einen Standardwert ersetzt.

Visual Studio erkennt Standardwerte für einige Eigenschaften.Diese Eigenschaften werden in der Projektdatei nur beibehalten, wenn die Werte vom Standardwert abweichen.

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

Die im Projekt mit beliebigen Elementtypnamen definierten Elemente werden standardmäßig im Projektmappen-Explorer unter dem entsprechenden Projektknoten angezeigt.Um ein Element in der Anzeige auszublenden, legen Sie die Visible-Metadaten auf false fest.Das folgende Element wird beispielsweise im Buildprozess verwendet, im Projektmappen-Explorer jedoch nicht angezeigt.

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

Die Elemente, die in den in das Projekt importierten Dateien deklariert sind, werden standardmäßig nicht angezeigt.Die während des Buildprozesses erstellten Elemente werden im Projektmappen-Explorer nie angezeigt.

Bedingungen für Elemente und Eigenschaften

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

Beim Festlegen der anzuzeigenden Eigenschaftswerte werden Eigenschaften, die in Visual Studio als konfigurationsabhängig eingestuft werden, anders ausgewertet als konfigurationsunabhängige Eigenschaften.Bei konfigurationsabhängigen Eigenschaften werden die Configuration-Eigenschaft und die Platform-Eigenschaft in Visual Studio entsprechend festgelegt. Außerdem wird MSBuild angewiesen, das Projekt erneut auszuwerten.Bei konfigurationsunabhängigen Eigenschaften wird nicht festgelegt, auf welche Weise Bedingungen ausgewertet werden.

Bedingte Ausdrücke für Elemente werden beim Festlegen der Elemente, die im Projektmappen-Explorer angezeigt werden sollen, immer ignoriert.

Debuggen

Zum Suchen und Starten der Ausgabeassembly sowie zum Anhängen des Debuggers müssen die Eigenschaften OutputPath, AssemblyName und OutputType in Visual Studio ordnungsgemäß definiert sein.Wenn über den Compiler im Buildprozess keine PDB-Datei generiert wurde, kann der Debugger nicht angehängt werden.

Zielausführung zur Entwurfszeit

In Visual Studio wird beim Laden eines Projekts versucht, Ziele mit bestimmten Namen auszuführen.Zu diesen Zielen gehören Compile, ResolveAssemblyReferences, ResolveCOMReferences, GetFrameworkPaths und CopyRunEnvironmentFiles.Visual Studio führt diese Ziele aus, sodass der Compiler zum Bereitstellen von IntelliSense initialisiert, der Debugger initialisiert und die im Projektmappen-Explorer angezeigten Verweise aufgelöst werden können.Wenn die Ziele nicht vorhanden sind, wird das Projekt ordnungsgemäß geladen und erstellt, bei Vorgängen zur Entwurfszeit in Visual Studio können jedoch nicht alle Funktionen ausgeführt werden.

Bearbeiten von Projektdateien in Visual Studio

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

So fügen Sie eine Projektdatei in Visual Studio entladen und bearbeiten

  1. In Projektmappen-Explorer öffnen Sie das Kontextmenü für das Projekt, und wählen Sie dann Projekt entladen aus.

    Das Projekt ist als (nicht verfügbar) gekennzeichnet.

  2. In Projektmappen-Explorer öffnen Sie das Kontextmenü für das Projekt nicht verfügbar, und wählen Sie dann Bearbeiten <Project File> aus.

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

  3. Bearbeiten, speichern und dann die Projektdatei.

  4. In Projektmappen-Explorer öffnen Sie das Kontextmenü für das Projekt nicht verfügbar, und wählen Sie dann Projekt erneut laden aus.

IntelliSense und Validierung

Bei Verwendung des XML-Editors zum Bearbeiten von Projektdateien werden IntelliSense und die Validierung über MSBuild-Schemadateien gesteuert.Diese werden in Visual Studio im Schemacache im Ordner [Visual Studio-Installationsverzeichnis]\Xml\Schemas gespeichert.

Die MSBuild-Kerntypen werden in Microsoft.Build.Core.xsd und allgemeine Typen, die von Visual Studio verwendet werden, wird in Microsoft.Build.CommonTypes.xsd definiert.Zum Anpassen der Schemas für die Bereitstellung von IntelliSense und zur Validierung benutzerdefinierter Elementtypnamen, Eigenschaften und Aufgaben können Sie entweder "Microsoft.Build.xsd" bearbeiten oder ein benutzerdefiniertes Schema erstellen, das das CommonTypes-Schema oder das Core-Schema enthält.Beim Erstellen eines benutzerdefinierten Schemas müssen Sie den XML-Editor so einrichten, dass das Eigenschaftenfenster verwendet wird.

Bearbeiten von geladenen Projektdateien

In Visual Studio wird der Inhalt von Projektdateien und von über Projektdateien importierten Dateien zwischengespeichert.Beim Bearbeiten einer geladenen Projektdatei werden Sie in Visual Studio automatisch aufgefordert, das Projekt erneut zu laden, sodass Änderungen wirksam werden.Wenn Sie jedoch eine Datei bearbeiten, die über ein geladenes Projekt importiert wurde, wird keine Meldung zum Neuladen angezeigt. Sie müssen das Projekt dann manuell entladen und anschließend neu laden, damit Änderungen wirksam werden.

Ausgabegruppen

Mehrere in Microsoft.Common.targets definierte Ziele verfügen über Namen, die auf OutputGroups oder OutputGroupDependencies enden.Visual Studio ruft diese Ziele auf, um bestimmte Listen von Projektausgaben abzurufen.Das SatelliteDllsProjectOutputGroup-Ziel erstellt beispielsweise eine Liste aller in einem Build erstellten Satellitenassemblys.Diese Ausgabegruppen werden bei Features wie Veröffentlichung, Bereitstellung und Verweisen zwischen Projekten verwendet.Projekte, in denen diese Funktionen nicht definiert sind, werden in Visual Studio geladen und erstellt, einige Funktionen werden jedoch möglicherweise nicht ordnungsgemäß ausgeführt.

Auflösen von Verweisen

Verweisauflösung ist der Prozess, bei dem die in einer Projektdatei gespeicherten Verweiselemente verwendet werden, um tatsächliche Assemblys zu suchen.Visual Studio muss die Verweisauflösung initiieren, um ausführliche Eigenschaften für jeden Verweis im Eigenschaftenfenster anzuzeigen.In der folgenden Liste werden die drei Verweistypen sowie deren Auflösung beschrieben.

  • Assemblyverweise:

    Das Projektsystem ruft ein Ziel mit dem bekannten Namen ResolveAssemblyReferences auf.Von diesem Ziel sollen Elemente mit dem Elementtypnamen ReferencePath erstellt werden.Alle Elemente müssen jeweils über eine Elementspezifikation (Wert des Include-Attributs eines Elements) mit dem vollständigen Pfad zum entsprechenden Verweis verfügen.Die Elemente sollten über alle Metadaten der übergebenen Eingabeelemente sowie über die folgenden neuen Metadaten verfügen:

    • CopyLocal: Gibt an, ob die Assembly in den Ausgabeordner kopiert werden soll. Ist auf true oder false festgelegt.

    • OriginalItemSpec: Enthält die ursprüngliche Elementspezifikation des Verweises.

    • ResolvedFrom wird auf "{TargetFrameworkDirectory}" festgelegt, wenn es über das Verzeichnis .NET Framework aufgelöst wurde.

  • COM-Verweise:

    Das Projektsystem ruft ein Ziel mit dem bekannten Namen ResolveCOMReferences auf.Von diesem Ziel sollen Elemente mit dem Elementtypnamen ComReferenceWrappers erstellt werden.Alle Elemente müssen jeweils über eine Elementspezifikation mit dem vollständigen Pfad zur Interop-Assembly für den entsprechenden Verweis verfügen.Die Elemente müssen über alle Metadaten der übergebenen Eingabeelemente sowie über neue Metadaten mit dem Namen CopyLocal verfügen, mit denen über die Festlegung auf true oder false angegeben wird, ob die Assembly in den Ausgabeordner kopiert werden soll.

  • Systemeigene Verweise

    Das Projektsystem ruft ein Ziel mit dem bekannten Namen ResolveNativeReferences auf.Von diesem Ziel sollen Elemente mit dem Elementtypnamen NativeReferenceFile erstellt werden.Die Elemente müssen über alle Metadaten der übergebenen Eingabeelemente sowie über neue Metadaten mit dem Namen OriginalItemSpec mit der ursprünglichen Elementspezifikation des entsprechenden Verweises verfügen.

Leistungsoptimierungen

Wenn Sie das Debuggen in Visual Studio Benutzeroberfläche (entweder durch Auswählen der F5-Taste oder durch Auswählen von Debuggen, von Debugging starten auf der Menüleiste) beginnen, verwendet der Buildprozess durch eine schnelle, um die Leistung zu verbessern.In einigen Fällen, in denen benutzerdefinierte Builds Dateien erstellen, die ihrerseits erstellt werden, werden die geänderten Dateien von der schnellen Überprüfung auf Updates nicht einwandfrei erkannt.In Projekten, die eine gründlichere Überprüfung auf Updates erfordern, lässt sich die schnelle Überprüfung auf Aktualisierungen deaktivieren, indem die Umgebungsvariable DISABLEFASTUPTODATECHECK=1 festgelegt wird.Alternativ kann dies als MSBuild-Eigenschaft im Projekt oder in einer vom Projekt importierten Datei festgelegt werden.

Für reguläre Builds in Visual Studio, gilt die schnelle Überprüfung auf Updates nicht zu, und das Projekt erstellt, als ob Sie den Build an der Eingabeaufforderung aufriefen.

Siehe auch

Aufgaben

Gewusst wie: Erweitern des Visual Studio-Buildvorgangs

Referenz

Item-Element (MSBuild)

Property-Element (MSBuild)

Target-Element (MSBuild)

Csc-Aufgabe

Vbc-Aufgabe

Konzepte

Erstellen eines Builds von der IDE aus

Registrieren von .NET Framework-Erweiterungen

Weitere Ressourcen

MSBuild-Grundlagen