Steuern, wo das Buildsystems die Binärdateien ablegt

Der Standardbuildprozess (wie in DefaultTemplate.xaml definiert) legt die Binärdateien aller kompilierten Codeprojekte in einem gemeinsamen Verzeichnis ab. In Einzelfällen möchten Sie die Binärdateien aber vielleicht in einer differenzierteren Ordnerstruktur anlegen.

Sie können die in diesem Thema vorgestellten Techniken dazu verwenden, einen benutzerdefinierten Buildprozess zu erstellen, bei dem die Binärdateien in einer von Ihnen festgelegten Verzeichnisstruktur abgelegt werden. Sie können außerdem mit den gleichen Prinzipien Buildprozesse auf verschiedene Weise anpassen. In diesem Thema werden die folgenden Techniken erläutert:

  • Anpassen des Windows Workflow-Segments des Buildprozesses. Sie müssen Änderungen in diesem Segment vornehmen, um die meisten Aspekte des Buildprozesses (Kompilierung und Verarbeitung der Binärdateien ausgenommen) anzupassen. In diesem Thema wird die Ausführung der folgenden Aufgaben beschrieben:

    • Erstellen eines benutzerdefinierten Buildprozesses durch Ändern einer Kopie der Standardvorlage (DefaultTemplate.xaml)

    • Deklarieren und Verwenden von Argumenten, um Daten an den Workflow zu übergeben

    • Deklarieren und Verwenden von Variablen, um Daten während des gesamten Workflows zu sammeln und zu übergeben

    • Ändern der Art, wie der Workflow mit der MSBuild-Aktivität MSBuild aufruft

    • Hochladen einer Datei auf den Buildserver und Verwendung der ConvertWorkspaceItem-Aktivität, um diese Datei für den Buildprozess verfügbar zu machen

  • Anpassen des MSBuild-Segments des Buildprozesses. Über Änderungen in diesem Segment können Sie die Kompilierung und Verarbeitung von Binärdateien noch effektiver anpassen. In diesem Thema wird die Ausführung der folgenden Aufgaben beschrieben:

    • Übergeben von Argumenten an MSBuild und Änderung der Verarbeitungsweise kompilierter Binärdateien in Codeprojekten mit diesen Argumenten.

    • Einrichten einer zentralen allgemeinen Codebibliothek für die eigenen MSBuild-Elemente, z. B. Eigenschaftengruppen oder Ziele. Durch Einrichten einer solchen Bibliothek kann Ihr Team zentrale Bestandteile der Buildprozesslogik einfach wiederverwenden und bearbeiten.

Tipp

Dieses Thema deckt drei verschiedene Codeprojekttypen ab: C#, C++ und Visual Basic. Möglicherweise können Sie die hier verwendeten Techniken auch auf andere Codeprojekttypen übertragen.

In diesem Thema

  • Erforderliche Berechtigungen

  • Speicherort des Standardbuildprozesses für kompilierte Binärdateien

  • Organisieren kompilierter Binärdateien über eine in allen Codeprojekten eingebettete Logik

    • Übersicht über den Prozess

    • Übersicht über die auszuführenden Schritte

    • Erstellen der Builddefinition und der benutzerdefinierten Buildprozessvorlage CustomOutputDirInline

    • Einbetten der Ablageordnerlogik in die Codeprojekte

  • Organisieren kompilierter Binärdateien über eine Logik, die in zwei zentralen Dateien verwaltet wird

    • Übersicht über den Prozess

    • Übersicht über die auszuführenden Schritte

    • Erstellen der allgemeinen MSBuild-Codedateien, die die Ablageordnerlogik enthalten

    • Erstellen der Builddefinition und der benutzerdefinierten Buildprozessvorlage CustomOutputDirImport

    • Aktualisieren der Builddefinition OurTeamBuild

    • Importieren der Ablageordnerlogik in die Codeprojekte

  • Nächste Schritte

Erforderliche Berechtigungen

Um die folgenden Prozeduren ausführen zu können, müssen folgende Berechtigungen auf Zulassen festgelegt sein:

  • Builddefinition bearbeiten.

  • Auschecken und Einchecken für die relevanten Verzeichnisse der Versionskontrolle

  • Builds zur Warteschlange hinzufügen.

Weitere Informationen finden Sie unter Team Foundation Server-Berechtigungen.

Speicherort des Standardbuildprozesses für kompilierte Binärdateien

Unabhängig davon, wie Sie Ihre Arbeit in Codeprojekte und Projektmappen aufgeteilt haben, legt der Standardbuildprozess alle kompilierten Binärdateien in einem gemeinsamen Unterverzeichnis im Ablageordner ab. Angenommen, folgende Projektmappen und Codeprojekte liegen vor:

  • ProjektmappeA

    • CPPWin32ConsoleApp (eine Visual C++-Konsolenanwendung)

    • CSharpConsoleApp (eine Visual C#-Konsolenanwendung)

  • ProjektmappeB

    • VBConsoleApp (eine Visual Basic-Konsolenanwendung)

Das folgende Diagramm veranschaulicht, wie und wo MSBuild die Binärdateien im Anschluss an die Kompilierung im Rahmen des Gesamtprozessablaufs (wie in DefaultTemplate.xaml definiert) abgelegt werden.

Standardfluss

Organisieren kompilierter Binärdateien über eine in allen Codeprojekten eingebettete Logik

Sie können angeben, dass die kompilierten Binärdateien in einer Unterverzeichnisstruktur abgelegt werden, die mit der Struktur der Projektmappen und Codeprojekte übereinstimmt.

Übersicht über den Prozess

Das folgende Diagramm zeigt in einer allgemeinen Übersicht, wie Sie einen solchen Buildprozess implementieren können:

Fluss mit eingebetteter benutzerdefinierter Ausgabelogik

Übersicht über die auszuführenden Schritte

Sie können die folgenden Schritte ausführen, um einen solchen benutzerdefinierten Buildprozess auf der Grundlage von DefaultTemplate.xaml zu erstellen:

  • Schritt 1 Builddefinition und Buildprozessvorlage

    • Erstellen Sie eine Builddefinition (z. B. mit dem Namen OurTeamBuild). Legen Sie auf der Registerkarte Prozess eine neue Buildprozessvorlage für die Builddefinition fest (z. B. mit dem Namen CustomOutputDirInline.xaml).

    • Führen Sie in CustomOutputDirInline.xaml die folgenden Schritte in der Instanz der Run MSBuild for Project-Aktivität aus, die den Code kompiliert:

      • Deaktivieren Sie die OutDir-Eigenschaft der Run MSBuild for Project-Aktivität, indem Sie den entsprechenden Wert entfernen und somit durch eine leere Zeichenfolge ersetzen.

        Tipp

        Wenn Sie diese Änderung nicht vornehmen, überschreibt die OutDir-Eigenschaft jede benutzerdefinierte Verzeichnisstrukturlogik, die Sie im Codeprojekt implementiert haben.

      • Ermitteln Sie den Zeichenfolgenwert, der den Ablageordner des Build-Agents enthält, aus der BinariesDirectory-Variablen, und übergeben Sie den Wert an ein MSBuild-Argument (z. B. mit dem Namen TeamBuildOutDir).

  • Schritt 2 Codeprojekte

    • Fügen Sie in jedem Codeprojekt, das der OurTeamBuild-Build kompiliert, das entsprechende Element (entweder OutputPath oder OutDir) hinzu, um die Unterverzeichnisstruktur der Ablageordner zu definieren.

In den folgenden Unterabschnitten wird ausführlich erläutert, wie Sie diese Schritte ausführen.

Erstellen der Builddefinition und der benutzerdefinierten Buildprozessvorlage CustomOutputDirInline

Sie legen den Grundstein für den Buildprozess, indem Sie eine Builddefinition auf der Grundlage einer neuen Buildprozessvorlage erstellen.

So erstellen Sie die Builddefinition und die Buildprozessvorlage

  1. Erstellen Sie eine Builddefinition.

    1. Geben Sie auf der Registerkarte Allgemein der Builddefinition einen Namen (z. B. OurTeamBuild).

    2. Fügen Sie auf der Registerkarte Prozess die Projektmappen hinzu, die Sie erstellen möchten.

      Weitere Informationen finden Sie unter Erstellen einer einfachen Builddefinition.

  2. Legen Sie auf der Registerkarte Prozess der OurTeamBuild-Builddefinition eine neue Buildprozessvorlage mit der Bezeichnung CustomOutputDirInline.xaml fest, die auf der Standardvorlage DefaultTemplate.xaml basiert.

    Weitere Informationen finden Sie unter Erstellen und Verwenden einer benutzerdefinierten Buildprozessvorlage.

  3. Öffnen Sie das Teamprojekt im Quellcodeverwaltungs-Explorer, und zeigen Sie den Ordner an, der den Buildprozess enthält.

    Standardmäßig heißt dieses Unterverzeichnis BuildProcessTemplates.

  4. Checken Sie die Datei CustomOutputDirInline.xaml, die Sie zuvor im Rahmen dieser Prozedur erstellt haben, aus und doppelklicken Sie dann darauf.

  5. Finden Sie im Workflow-Designer die zweite Instanz der Run MSBuild for Project-Aktivität, die sich in der folgenden Struktur befindet:

    1. Sequenz (Sequence) >

    2. Auf Agent ausführen (AgentScope) >

    3. Kompilieren, Testen und Zuordnen von Changesets und Arbeitsaufgaben (TryCatch [Try]) >

    4. Sequenz (Sequence) >

    5. Kompilieren, Testen und Zuordnen von Changesets und Arbeitsaufgaben (Parallel) >

    6. Kompilieren und Testen TryCatch [Try] >

    7. Kompilieren und Testen Sequence >

    8. Für jede Konfiguration in BuildSettings.PlatformConfigurationsForEach [Body] >

    9. Kompilieren und Testen für Konfiguration Sequence >

    10. Wenn BuildSettings.HasProjectsToBuild If [Then] >

    11. Für jedes Projekt in BuildSettings.ProjectsToBuildForEach [Body] >

    12. Kompilieren des Projekts TryCatch [Try] >

    13. Kompilieren des Projekts Sequence >

    14. Ausführen von MSBuild für das Projekt MSBuild

    Weitere Informationen zur Navigation in dieser Struktur finden Sie unter Navigieren in einem komplexen Windows Workflow.

  6. Klicken Sie mit der rechten Maustaste auf die Run MSBuild for Project-Aktivität, und klicken Sie anschließend auf Eigenschaften.

  7. Entfernen Sie im Bereich Eigenschaften die Daten im Feld OutDir, um die Eigenschaft auf eine leere Zeichenfolge festzulegen.

  8. Legen Sie im Bereich Eigenschaften die CommandLineArguments-Eigenschaft auf den folgenden Wert fest:

    String.Format("/p:SkipInvalidConfigurations=true;TeamBuildOutDir=""{0}"" {1}",
    BinariesDirectory, MSBuildArguments)
    
  9. Speichern Sie CustomOutputDirInline.xaml.

  10. Checken Sie die Änderungen an dieser Datei im Quellcodeverwaltungs-Explorer ein.

Einbetten der Ablageordnerlogik in die Codeprojekte

Nachdem Sie die Builddefinition und die benutzerdefinierte Buildprozessvorlage erstellt haben, müssen Sie die Verzeichnisstrukturlogik in alle Codeprojekte einbetten, die vom Buildprozess kompiliert werden.

Tipp

Sie können die Logik nicht in den Workflow selbst einbetten, da der DefaultTemplate.xaml-Workflow nicht alle Projekte mit dem MSBuild-Compiler ausführt. Stattdessen ruft der Workflow einmalig MSBuild auf, um alle Projektmappen und Projekte zu kompilieren.

So betten Sie die Ablageordnerlogik ein

  1. Öffnen Sie im Quellcodeverwaltungs-Explorer eine Projektmappe, die von der OurTeamBuild-Builddefinition erstellt wird.

  2. Fügen Sie das erforderliche Ausgabeverzeichniselement jedem Codeprojekt in der Projektmappe hinzu. In Projekten mit verwaltetem Code (Visual C# oder Visual Basic) heißt diese Eigenschaft OutputPath. In Visual C++-Projekten heißt diese Eigenschaft OutDir. Führen Sie für jedes Codeprojekt in der Projektmappe folgende Schritte aus:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt. Wenn der Befehl Projekt entfernen verfügbar ist, klicken Sie darauf.

    2. Klicken Sie mit der rechten Maustaste auf das Projekt, und klicken Sie dann auf Projektname bearbeiten.

    3. Führen Sie einen der folgenden Schritte aus:

      • Wenn es sich bei dem Projekt um ein Projekt mit verwaltetem Code handelt (z. B. Visual C# oder Visual Basic) fügen Sie ein OutputPath-Element hinzu. Sie müssen das Element nach dem letzten OutputPath-Element im Codeprojekt einfügen. Siehe dazu folgendes Beispiel:

        <Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003 ...">
         ...
        <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'">
         ...
         <OutputPath>bin\Debug\</OutputPath>
         ...
        </PropertyGroup>
        <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
         ...
         <OutputPath>bin\Release\</OutputPath>
         ...
        </PropertyGroup>
        
        <PropertyGroup Condition="$(TeamBuildOutDir) != '' ">
        <OutputPath>$(TeamBuildOutDir)\$(SolutionName)\$(MSBuildProjectName)\$(Configuration)</OutputPath>
        </PropertyGroup>
        
      • Wenn es sich bei dem Projekt um ein Visual C++-Projekt handelt, fügen Sie ein OutDir-Element hinzu. Sie müssen dieses Element vor dem Element einfügen, das Microsoft.Cpp.targets importiert. Siehe dazu folgendes Beispiel:

        <Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003 ...">
        ...
        
        <PropertyGroup Condition="$(TeamBuildOutDir) != '' ">
         <OutDir>$(TeamBuildOutDir)\$(SolutionName)\$(MSBuildProjectName)\$(Configuration)\</OutDir>
        </PropertyGroup>
        
        <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
        </Project>
        
    4. Speichern Sie das Codeprojekt.

  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie dann auf Einchecken.

  4. Wiederholen Sie diese Schritte für jede Projektmappe, die von OurTeamBuild erstellt wird.

Organisieren kompilierter Binärdateien mit einer Logik, die in zwei zentralen Dateien verwaltet wird

Wenn Sie viele Codeprojekte warten müssen, können Sie den im vorherigen Abschnitt beschriebenen Prozess optimieren, indem Sie die Elemente OutDir und OutputPath in zwei freigegebenen Dateien ablegen. Auf diese Weise können Sie die Verzeichnisstruktur des Ablageordners noch einfacher ändern, da Sie nicht auf jedes Codeprojekt einzeln zugreifen müssen, sondern die Änderungen über zwei zentrale Dateien vornehmen können.

Übersicht über den Prozess

Das folgende Diagramm zeigt in einer allgemeinen Übersicht, wie Sie einen solchen Buildprozess implementieren können:

Fluss mit importierter benutzerdefinierter Ausgabelogik

Übersicht über die auszuführenden Schritte

Folgende Schritte müssen ausgeführt werden, um einen benutzerdefinierten Buildprozess auf der Grundlage von DefaultTemplate.xaml zu erstellen:

  • Erstellen Sie im Quellcodeverwaltungs-Explorer ein Verzeichnis (z. B. mit dem Namen $/OurTeam/BuildProcessMSBuild), das den allgemeinen MSBuild-Code enthalten soll. Erstellen und speichern Sie in diesem Verzeichnis die MSBuild-Dateien, die die Unterverzeichnisstruktur der Ablageordner definieren.

  • Schritt 1 Builddefinition und Buildprozessvorlage

    • Aktualisieren Sie die Builddefinition (z. B. die Builddefinition mit dem Namen OurTeamBuild), indem Sie folgende Schritte ausführen:

      • Ordnen Sie auf der Registerkarte Arbeitsbereich das $/OurTeam/BuildProcessMSBuild-Verzeichnis zu.

      • Legen Sie auf der Registerkarte Prozess für die Builddefinition eine neue Buildprozessvorlage fest (z. B. mit dem Namen CustomOutputDirImport.xaml).

    • Führen Sie in CustomOutputDirImport.xaml folgende Schritte aus:

      • Deklarieren Sie LocalPathToMSBuildCode als eine String-Variable, deren Gültigkeitsbereich sich auf die Run On Agent-Aktivität erstreckt.

      • Deklarieren Sie ServerPathToMSBuildCode als Argument.

        Nachdem Sie dieses Argument hinzugefügt haben, müssen Sie die OurTeamBuild-Definition bearbeiten. Geben Sie auf der Registerkarte Prozess$/OurTeam/BuildProcessMSBuild als Wert für den Buildprozessparameter ein.

      • Fügen Sie in der Run on Agent >-Aktivität (vor der Try Compile, Test, and Associate Changesets and Work Items [Try]-Aktivität) eine ConvertWorkspaceItem-Aktivität hinzu, um das ServerPathToMSBuildCode-Argument in einen lokalen Pfad auf dem Build-Agent zu konvertieren, der von MSBuild verarbeitet werden kann. Diesen Wert legen Sie anschließend in der LocalPathToMSBuildCode-Variablen ab.

      • In der Instanz der Run MSBuild for Project-Aktivität, die den Code kompiliert, führen Sie die folgenden Schritte aus:

        • Deaktivieren Sie die OutDir-Eigenschaft der Run MSBuild for Project-Aktivität, indem Sie den entsprechenden Wert entfernen und somit durch eine leere Zeichenfolge ersetzen.

          Tipp

          Wenn Sie diese Änderung nicht vornehmen, überschreibt die OutDir-Eigenschaft jede benutzerdefinierte Verzeichnisstrukturlogik, die Sie im Codeprojekt implementiert haben.

        • Ermitteln Sie den Zeichenfolgenwert, der den Ablageordner des Build-Agents enthält, aus der BinariesDirectory-Variablen, und übergeben Sie den Wert als Argument an MSBuild (z. B. mit dem Namen TeamBuildOutDir).

        • Übergeben Sie den Wert von LocalPathToMSBuildCode als Argument an MSBuild (z. B. mit dem Namen CommonMSBuildCode).

  • Schritt 2 Codeprojekte

    • Fügen Sie in jedem Codeprojekt, das OurTeamBuild kompiliert, ein <Import />-Element an der entsprechenden Position hinzu.

In den folgenden Unterabschnitten wird ausführlich erläutert, wie diese Schritte ausgeführt werden.

Erstellen der allgemeinen MSBuild-Codedateien, die die Ablageordnerlogik enthalten

Bei dieser Vorgehensweise erstellen Sie zuerst ein Verzeichnis und zwei MSBuild-Projektdateien. Die Dateien enthalten die Logik zur Festlegung der Unterverzeichnisstruktur, die in den Ablageordnern erstellt wird.

So erstellen Sie die Dateien

  1. Führen Sie im Quellcodeverwaltungs-Explorer einen der folgenden Schritte aus:

    • Suchen Sie das Verzeichnis, in dem Sie den allgemeinen MSBuild-Code speichern.

    • Erstellen Sie ein Verzeichnis zum Speichern des allgemeinen MSBuild-Codes, und geben Sie dem Verzeichnis z B. den Namen $/OurTeam/BuildProcessMSBuild.

  2. Wenn der Link Nicht zugeordnet neben der Bezeichnung Lokaler Pfad oben im Quellcodeverwaltungs-Explorer angezeigt wird, klicken Sie auf den Link, um das Serververzeichnis dem entsprechenden Verzeichnis im lokalen Arbeitsbereich zuzuordnen.

  3. Erstellen, speichern und überprüfen Sie die folgenden Dateien in $/OurTeam/BuildProcessMSBuild:

    • Eine Datei, die die Ablageordnerlogik für Projekte mit verwaltetem Code enthält (Visual C# oder Visual Basic, z. B. mit dem Namen ManagedCodeProjectOutDir.targets)

      <Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup Condition="$(TeamBuildOutDir) != '' ">
       <OutputPath>$(TeamBuildOutDir)\$(SolutionName)\$(MSBuildProjectName)\$(Configuration)</OutputPath>
      </PropertyGroup>
      </Project>
      
    • Eine Datei, die die Ablageordnerlogik für Visual C++-Codeprojekte enthält (z. B. mit dem Namen CPPCodeProjectOutDir.targets)

      <Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup Condition="$(TeamBuildOutDir) != '' ">
       <OutDir>$(TeamBuildOutDir)\$(SolutionName)\$(MSBuildProjectName)\$(Configuration)\</OutDir>
      </PropertyGroup>
      </Project>
      

Erstellen der Builddefinition und der benutzerdefinierten Buildprozessvorlage CustomOutputDirImport

Sie können die Builddefinition mit dem Namen OurTeamBuild wiederverwenden, die Sie bereits zuvor in diesem Thema erstellt haben. Sie legen für die Builddefinition eine neue Buildprozessvorlage fest und nehmen zusätzliche Anpassungen vor.

So erstellen Sie die Builddefinition und die Buildprozessvorlage

  1. Klicken Sie im Team Explorer mit der rechten Maustaste auf OurTeamBuild und dann auf Bearbeiten.

  2. Legen Sie auf der Registerkarte Prozess eine neue Buildprozessvorlage mit dem Namen CustomOutputDirImport.xaml fest, die auf der Standardvorlage DefaultTemplate.xaml basiert.

    Weitere Informationen finden Sie unter Erstellen und Verwenden einer benutzerdefinierten Buildprozessvorlage.

  3. Öffnen Sie das Teamprojekt im Quellcodeverwaltungs-Explorer, und zeigen Sie den Ordner an, der den Buildprozess enthält. Standardmäßig lautet der Name des Unterverzeichnisses BuildProcessTemplates.

  4. Checken Sie die Datei CustomOutputDirImport.xaml, die Sie zuvor im Rahmen dieser Prozedur erstellt haben, aus und doppelklicken Sie dann darauf.

  5. Finden Sie im Workflow-Designer die Run on Agent-Aktivität, die sich in der folgenden Struktur befindet:

    1. Sequenz (Sequence) >

    2. Auf Agent ausführen (AgentScope) >

    Weitere Informationen zur Navigation in dieser Struktur finden Sie unter Navigieren in einem komplexen Windows Workflow.

  6. Klicken Sie am unteren Rand des Fensters auf Argumente.

  7. Erstellen Sie im Bereich Argumente ein Argument, und nennen Sie es ServerPathToMSBuildCode.

  8. Aktivieren Sie im Bereich Eigenschaften das Kontrollkästchen IsRequired.

  9. Klicken Sie am unteren Rand des Fensters auf Variablen.

  10. Deklarieren Sie im Bereich Variablen eine Variable mit dem Namen LocalPathToMSBuildCode vom Typ String und mit dem Gültigkeitsbereich Run On Agent.

  11. Ziehen Sie die ConvertWorkspaceItem-Aktivität aus dem Abschnitt Team Foundation Build Activities der Toolbox zwischen die Aktivitäten Initialize Workspace und If CreateLabel.

    Tipp

    Wenn der Abschnitt Team Foundation-Build-Aktivitäten nicht in der Toolbox angezeigt wird, können Sie diesen Abschnitt manuell über die Microsoft.TeamFoundation.Build.Workflow.dll-Assembly hinzufügen. Weitere Informationen finden Sie unter How to: Add Activities to the Toolbox.

  12. Klicken Sie mit der rechten Maustaste auf die ConvertWorkspaceItem-Aktivität, und klicken Sie anschließend auf Eigenschaften.

  13. Legen Sie im Bereich Eigenschaften folgende Eigenschaftenwerte fest:

    • Anzeigename: Get Local Path to MSBuild Code

    • Eingabe: ServerPathToMSBuildCode

    • Ergebnis: LocalPathToMSBuildCode

    • Arbeitsbereich: Workspace

  14. Suchen Sie die zweite Instanz der Run MSBuild for Project-Aktivität, die sich in der folgenden Struktur befindet:

    1. Sequenz (Sequence) >

    2. Auf Agent ausführen (AgentScope) >

    3. Kompilieren, Testen und Zuordnen von Changesets und Arbeitsaufgaben (TryCatch [Try]) >

    4. Sequenz (Sequence) >

    5. Kompilieren, Testen und Zuordnen von Changesets und Arbeitsaufgaben (Parallel) >

    6. Kompilieren und Testen TryCatch [Try] >

    7. Kompilieren und Testen Sequence >

    8. Für jede Konfiguration in BuildSettings.PlatformConfigurationsForEach [Body] >

    9. Kompilieren und Testen für Konfiguration Sequence >

    10. Wenn BuildSettings.HasProjectsToBuild If [Then] >

    11. Für jedes Projekt in BuildSettings.ProjectsToBuildForEach [Body] >

    12. Kompilieren des Projekts TryCatch [Try] >

    13. Kompilieren des Projekts Sequence >

    14. Ausführen von MSBuild für das Projekt MSBuild

    Weitere Informationen zur Navigation in dieser Struktur finden Sie unter Navigieren in einem komplexen Windows Workflow.

  15. Klicken Sie mit der rechten Maustaste auf die Run MSBuild for Project-Aktivität, und klicken Sie anschließend auf Eigenschaften.

  16. Entfernen Sie im Bereich Eigenschaften die Daten im Feld OutDir, um die Eigenschaft auf eine leere Zeichenfolge festzulegen.

  17. Legen Sie im Bereich Eigenschaften die CommandLineArguments-Eigenschaft auf den folgenden Wert fest:

    String.Format("/p:SkipInvalidConfigurations=true;CommonMSBuildCode=""{0}"";TeamBuildOutDir=""{1}"" {2}",
    LocalPathToMSBuildCode, BinariesDirectory, MSBuildArguments)
    
  18. Speichern Sie CustomOutputDirImport.xaml.

    Checken Sie die Änderungen an der Datei im Quellcodeverwaltungs-Explorer ein.

Aktualisieren der Builddefinition OurTeamBuild

Als Nächstes müssen Sie die Änderungen an der OurTeamBuild-Builddefinition aktualisieren.

So aktualisieren Sie die Builddefinition

  1. Erweitern Sie im Team Explorer das Teamprojekt, in dem Sie arbeiten, erweitern Sie den Ordner Builds, klicken Sie mit der rechten Maustaste auf die Builddefinition OurTeamBuild, und klicken Sie anschließend auf Builddefinition bearbeiten.

  2. Klicken Sie auf die Registerkarte Arbeitsbereich, und fügen Sie anschließend einen Eintrag hinzu, der die folgenden Werte enthält:

    • Status: Aktiv

    • Quellcodeverwaltungsordner: $/OurTeam/BuildProcessMSBuild

    • Build Agent-Ordner: $(SourceDir)\BuildProcessMSBuild

  3. Klicken Sie auf die Registerkarte Prozess, und geben Sie $/OurTeam/BuildProcessMSBuild im Feld ServerPathToMSBuildCode ein.

  4. Speichern Sie die Builddefinition.

Importieren der Ablageordnerlogik in die Codeprojekte

Nachdem Sie die Builddefinition und die benutzerdefinierte Buildprozessvorlage erstellt haben, müssen Sie die Codeprojekte aktualisieren, um die Verzeichnisstrukturlogik zu importieren.

So importieren Sie die Ablageordnerlogik

  1. Doppelklicken Sie im Quellcodeverwaltungs-Explorer auf eine Projektmappe, die von OurTeamBuild erstellt wird.

  2. Führen Sie für jedes Codeprojekt in der Projektmappe folgende Schritte aus:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt. Wenn der Befehl Projekt entfernen verfügbar ist, klicken Sie darauf.

    2. Klicken Sie mit der rechten Maustaste auf das Projekt, und klicken Sie dann auf Bearbeiten Projektname.

    3. Führen Sie einen der folgenden Schritte aus:

      • Wenn es sich bei dem Projekt um ein Projekt mit verwaltetem Code handelt (Visual C# oder Visual Basic), fügen Sie ein Import-Element nach dem letzten OutputPath-Element des Codeprojekts ein. Siehe dazu folgendes Beispiel:

        <Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003 ...">
         ...
        <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'">
         ...
         <OutputPath>bin\Debug\</OutputPath>
         ...
        </PropertyGroup>
        <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
         ...
         <OutputPath>bin\Release\</OutputPath>
         ...
        </PropertyGroup>
        
        <Import Condition=" $(CommonMSBuildCode) != ''" Project="$(CommonMSBuildCode)\ManagedCodeProjectOutDir.targets"/>
        
      • Wenn es sich bei dem Projekt um ein Visual C++-Projekt handelt, fügen Sie ein Import-Element vor dem Element zum Importieren von Microsoft.Cpp.targets ein. Siehe dazu folgendes Beispiel:

        <Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003 ...">
        ...
        <Import Condition=" $(CommonMSBuildCode) != ''" Project="$(CommonMSBuildCode)\CPPCodeProjectOutDir.targets"/>
        
        <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
        </Project>
        
    4. Speichern Sie das Codeprojekt.

  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie dann auf Einchecken.

  4. Wiederholen Sie die vorherigen Schritte für jede Projektmappe, die von OurTeamBuild erstellt wird.

Nächste Schritte

Im Anschluss können Sie noch die folgenden Aufgaben ausführen:

  • Ändern Sie die Ablageordnerlogik. Um die Anforderungen Ihres Teams zu erfüllen, können Sie den Inhalt der Elemente OutputPath und OutDir aus den vorherigen Abschnitten ändern.

  • Speichern Sie das benutzerdefinierte Codeprojekt als Vorlage. Wenn Ihr Team eine Vielzahl von Codeprojekten erstellt, können Sie die benutzerdefinierte MSBuild-Logik automatisch in neue Codeprojekte integrieren. Klicken Sie im Projektmappen-Explorer auf das Codeprojekt, öffnen Sie das Menü Datei, und klicken Sie dann auf Vorlage exportieren.

Zusätzliche Ressourcen

Weitere Informationen finden Sie in den folgenden Themen auf der Microsoft-Website:

Siehe auch

Konzepte

Verwenden des Quellcodeverwaltungs-Explorers

Erstellen eines Arbeitsbereichs zum Arbeiten mit dem Teamprojekt

Weitere Ressourcen

MSBuild-Referenz