Automatisieren von Builds und Konfigurationen in Visual Studio .NET

Visual Studio .NET 2003
Veröffentlicht: 01. Apr 2002 | Aktualisiert: 21. Jun 2004
Von Kemp Brown

Dieser Artikel enthält Informationen darüber, wie Sie mit dem Microsoft® Visual-Studio-.NET-Automationsmodell Projektmappen- und Projektbuilds sowie Buildkonfigurationen automatisieren können.

Auf dieser Seite

Einführung Einführung
Objekte des Automationsbuildmodells für Projektmappen und Projekte Objekte des Automationsbuildmodells für Projektmappen und Projekte
Bearbeiten von Buildkonfigurationen Bearbeiten von Buildkonfigurationen
Starten von Projektmappen- und Projektbuilds  Starten von Projektmappen- und Projektbuilds
Projektbuildabhängigkeiten Projektbuildabhängigkeiten
Festlegen eines Startprojekts Festlegen eines Startprojekts
Schlussfolgerung  Schlussfolgerung

Einführung

Wenn Sie in Visual Studio .NET ein Projekt erstellen, gilt dabei die mit dem Projekt verknüpfte Buildkonfiguration. In der Regel erstellen Sie eine Projektmappe oder ein Projekt manuell mit Hilfe der integrierten Entwicklungsumgebung (Integrated Development Environment oder IDE). Das Visual-Studio-.NET-Automationsmodell enthält jedoch Objekte, die es Ihnen ermöglichen, programmtechnisch Buildkonfigurationen zu ändern und Buildoperationen durchzuführen.

Mit Hilfe des Buildmodells können Sie die Projekte auswählen, die erzeugt werden sollen, und andere Projekte vom Build ausschließen. Darüber hinaus können Sie mit Hilfe von Buildkonfigurationen festlegen, wie ausgewählte Projekte erzeugt werden. In Visual Studio können zwei Arten von Buildkonfigurationen definiert werden: Projektmappe und Projekt.

Mit Hilfe des Projektmappenobjekts ist es programmtechnisch möglich, eine Projektmappe oder ein ausgewähltes Projekt auszuführen, zu debuggen, zu generieren und weiterzugeben. Die Fähigkeit zur programmtechnischen Steuerung von Buildkonfigurationen sowie Projekt- und Projektmappenbuilds ist vor allem nützlich, um unbeaufsichtigte Builds, automatisierte Testsuites und Batchjobs zu erzeugen. Die Verwendung des Buildmodells bietet u.a. folgende Möglichkeiten:

  • Erstellen, Aktivieren und Löschen von Projektmappenkonfigurationen

  • Erstellen, Ausführen und Weitergeben einzelner oder aller Projekte in einer Projektmappenkonfiguration

  • Abrufen von Informationen über Objekte innerhalb einer Projekt- oder Projektmappenkonfiguration

  • Hinzufügen, Entfernen und Abrufen von Informationen über Projektbuildabhängigkeiten

Die meisten Elemente der Projektmappen- und Projektbuildobjekte im Visual Studio .NET-Automationsmodell spiegeln die Befehle in der Visual Studio .NET-IDE wider. So enthält z.B. das Projektmappenobjekt Elemente, die Befehlen im Menü Build entsprechen, wie etwa Projektmappe erstellen, Projektmappe neu erstellen, Projekt erstellen und Projekt neu erstellen.

Ausführliche Informationen über die Funktionsweise von Projektmappen- und Projektbuildkonfigurationen und ihre Konfiguration in der IDE finden Sie unter Builds During Application Development und Build Configurations in der Visual Studio-Produktdokumentation (in Englisch).

Objekte des Automationsbuildmodells für Projektmappen und Projekte

Das Visual Studio .NET-Automationsbuildmodell enthält folgende Objekte, mit denen Sie Projektmappen- und Projektbuildkonfigurationen sowie Projektmappen- und Projektbuildabhängigkeiten bearbeiten und Builds automatisch starten können.

Objektname

Beschreibung

BuildDependency-Objekt

Dieses Objekt stellt ein Projekt dar, das erstellt werden muss, bevor das übergeordnete Projekt erstellt werden kann.

BuildDependencies-Auflistung

Diese Auflistung enthält alle Projekte, die erstellt werden müssen, bevor das übergeordnete Projekt erstellt werden kann.

Configuration-Objekt

Dieses Objekt stellt eine Projektkonfiguration oder eine Gruppe von Buildeinstellungen dar, z.B. die Debug-Projektkonfiguration für die .NET-Plattform.

Configurations-Auflistung

Diese Auflistung enthält alle Objekte der Projektkonfiguration.

ConfigurationManager-Objekt

Dieses Objekt stellt Buildkonfigurationen und -Plattformen dar.

OutputGroup-Objekt

Dieses Objekt enthält die Dateien, die vom Projekt erstellt werden.

OutputGroups-Auflistung

Diese Auflistung enthält alle OutputGroup-Objekte.

SolutionBuild-Objekt

Dieses Objekt dient zum Erstellen, Bereinigen und Weitergeben der aktiven Projektmappenkonfiguration.

SolutionConfiguration-Objekt

Dieses Objekt stellt eine Liste mit zu erstellenden Projekten und ihren Konfigurationen dar.

SolutionConfigurations-Auflistung

Diese Auflistung enthält alle definierten SolutionConfiguration-Objekte.

SolutionContext-Objekt

Dieses Objekt stellt den Buildkontext für jedes Projekt in einem SolutionConfiguration-Objekt dar.

SolutionContexts-Auflistung

Diese Auflistung enthält alle SolutionContext-Objekte in einem SolutionConfiguration-Objekt, eines pro Projekt.

Im Visual Studio .NET-Automationsmodell stehen Objekte und Auflistungen in folgenden hierarchischen Beziehungen zueinander:
DTE SolutionBuild BuildDependencies BuildDependency SolutionConfigurations SolutionConfiguration SolutionContexts SolutionContext Projekt ConfigurationManager Configurations Configuration OutputGroups OutputGroup

Einen ausführlichen Überblick über das gesamte Visual Studio .NET-Automationsmodell finden Sie unter Automation Object Model Chart in der Visual Studio-Produktdokumentation (in Englisch).

Informationen über die verfügbaren Konfigurationen und Projektkontexte finden Sie unter Configuration, Configuration Properties, Solution Property Pages Dialog Box (in Englisch).

Bearbeiten von Buildkonfigurationen

Es gibt zwei unterschiedliche Arten von Buildkonfigurationen:
Projektmappe und Projekt. In den folgenden Abschnitten wird beschrieben, wie Sie die einzelnen Arten programmtechnisch erstellen und bearbeiten.

Projektmappen-Buildkonfigurationen
Eine Projektmappen-Buildkonfiguration gibt an, wie bestimmte Projekte in einer Projektmappe erstellt und, falls aktiviert, weitergegeben werden. Projektmappen verfügen über zwei Standardbuildkonfigurationen: Debug und Release. Mit dem Dialogfeld Konfigurations-Manager können Sie neue Projektmappenkonfigurationen erstellen, Konfigurationen löschen oder bearbeiten. Sie können diese Aufgabe auch programmtechnisch mit dem SolutionConfiguration-Objekt durchführen. Im folgenden VSMacro-Beispiel wird dies veranschaulicht:

Sub SolutionConfigurationExample() 
   ' Setzt die Projektmappenkonfiguration auf "Release". 
   Dim SolnCfg As SolutionConfiguration = DTE.Solution. _ 
     SolutionBuild.SolutionConfigurations.Item("Release") 
   ' Hinweis in der nächsten Zeile entfernen, um die aktuelle 
   ' Konfiguration zu löschen. ANMERKUNG: Die letzte Projektmappenkonfiguration  
   ' kann nicht gelöscht werden.  
'SolnCfg.Delete() 
   ' Erstellt eine neue Projektmappenkonfiguration auf der Basis der vorhandenen  
   ' "Debug"-Buildkonfiguration. Diese muss auf einer vorhandenen basieren. 
DTE.Solution.SolutionBuild.SolutionConfigurations.Add("NewSolnCfg", _ 
     "Debug", False) 
   ' Aktiviert die angegebene Projektmappenkonfiguration, in diesem Fall  
   ' "NewSolnCfg". SolnCfg = DTE.Solution.SolutionBuild.SolutionConfigurations. _ 
     Item("NewSolnCfg") 
   SolnCfg.Activate() 
End Sub

Ein Projektmappenkontext ist die Zeile mit Einstellungen, die im Dialogfeld Konfigurations-Manager für die Projektmappe angezeigt wird. Die Einstellungen bestehen aus den Einträgen Projekt, Projektkonfiguration, Plattform und Angaben über die Erstellung. Ein SolutionContext-Objekt stellt diese Zeile mit Eigenschaftswerten dar, und die SolutionContexts-Auflistung enthält alle Zeilen für diese Projektmappenkonfiguration.

Das folgende Beispiel enthält eine Liste aller Projektmappen-Kontextwerte für jedes Projekt in der Projektmappenkonfiguration "Debug".

Sub SolnCtx() 
   ' "Debug"-Projektmappenkonfiguration wählen.
      Dim SolnCfg As SolutionConfiguration = DTE.Solution. _ 
     SolutionBuild.SolutionConfigurations.Item("Debug") 
   Dim SolnCtx As SolutionContext 
   Dim SolnCtxs As SolutionContexts = SolnCfg.SolutionContexts 
   Dim msg As String 
   ' Listet die Projektmappen-Kontextwerte für jedes Projekt in der  
   ' Projektmappe auf. 
   For Each SolnCtx In SolnCtxs 
      msg = "Projektname: " & SolnCtx.ProjectName & vbCr 
      msg = msg & "Konfigurationsname: " & SolnCtx.ConfigurationName & _ 
        vbCr 
      msg = msg & "Plattformname: " & SolnCtx.PlatformName & vbCr 
      msg = msg & "ShouldBuild: " & SolnCtx.ShouldBuild & vbCr 
      msg = msg & "ShouldDeploy: " & SolnCtx.ShouldDeploy & vbCr 
      MsgBox(msg) 
   Next 
End Sub

Projektbuildkonfigurationen
Projektbuildkonfigurationen bestehen aus Gruppen mit Einstellungen für das Debuggen, Erstellen, Weitergeben usw. Diese Konfigurationseinstellungen werden im Dialogfeld Projekt-Eigenschaftenseiten aufgelistet. Sie können diese anzeigen, indem Sie mit der rechten Maustaste auf ein Projekt im Projektmappen-Explorer klicken und im Kontextmenü den Befehl Eigenschaften auswählen. Die verfügbaren Projektkonfigurations- und Plattformbezeichnungen werden in Dropdownfeldern am oberen Rand des Dialogfelds angezeigt.

Die Knoten Allgemeine Eigenschaften und Konfigurationseigenschaften im Dialogfeld enthalten eine Liste aller verfügbaren Eigenschaften für die Projektbuildkonfiguration, die Sie ändern können. Wenn Sie beispielsweise die Buildeigenschaften anzeigen oder ändern möchten, klicken Sie unter Konfigurationseigenschaften auf den Knoten Build. Wenn Sie eine Einstellung ändern und anschließend auf OK klicken, werden die Einstellungen für diesen Konfigurationsnamen und den Plattformnamen gespeichert. Durch Verwendung von Objekten im Visual Studio .NET-Automationsmodell können Sie Einstellungen für die Projektbuildkonfiguration programmtechnisch ändern.

Weitere Informationen zur Funktionsweise von Buildkonfigurationen und ihrer Erstellung finden Sie unter Default and Custom Builds (in Englisch).
Im folgenden VSMacro-Beispiel wird gezeigt, wie Sie den Wert einer Einstellung in der Buildkonfiguration eines Projekts ändern.

Sub ProjConfig() 
   ' Dieses Beispiel zeigt, wie Sie den booleschen Wert der Einstellung 
   ' TRACE-Konstante definieren in der Buildkonfiguration des 
   ' angegebenen Projekts ändern. Für dieses Beispiel wird vorausgesetzt, 
  ' dass ein Projekt geladen ist. 
   Dim Proj As Project = DTE.VBProjects.Item(1) 
   MsgBox("Projektname: " & Proj.Name) 
   MsgBox("Zu ändernde Eigenschaft der Projektkonfiguration: " &    Proj. _ 
     ConfigurationManager.ActiveConfiguration.Properties.Item(3).Name) 
   MsgBox("Aktueller Wert: " & Proj.ConfigurationManager. _ 
     ActiveConfiguration.Properties.Item("DefineTrace").Value) 
     Proj.ConfigurationManager.ActiveConfiguration.Properties.Item _ 
       ("DefineTrace").Value = True 
   MsgBox("Neuer Wert: " & Proj.ConfigurationManager. _ 
     ActiveConfiguration.Properties.Item("DefineTrace").Value) 
End Sub

Eine weitere Möglichkeit zur Bearbeitung der Eigenschaften einer Projektkonfiguration ist die Verwendung des ConfigurationManager-Objekts. Im nachfolgenden Beispiel wird dieser Vorgang aufgezeigt.

Sub CfgMgrExample() 
   ' Dieses Beispiel zeigt, wie Sie eine Projektkonfigurationseigenschaft mit  
   ' dem ConfigurationManager-Objekt ändern. 
   Dim Proj As Project = DTE.VBProjects.Item(1) 
   Dim msg As String 
   msg = "Projektname: " & Proj.Name & vbCr 
   msg = msg & "Projekteigenschaftsname: " & Proj.ConfigurationManager. _ 
     Item(1).Properties.Item(1).Name & vbCr 
   msg = msg & "Projekteigenschaftswert: " & Proj.ConfigurationManager. _ 
     Item(1).Properties.Item(1).Value & vbCr 
   MsgBox(msg) 
   msg = "" 
   Proj.ConfigurationManager.Item(1).Properties.Item(1).Value = False 
   msg = "Projektname: " & Proj.Name & vbCr 
   msg = msg & "Projekteigenschaftsname: " & Proj.ConfigurationManager. _ 
     Item(1).Properties.Item(1).Name & vbCr 
   msg = msg & "Projekteigenschaftswert: " & Proj.ConfigurationManager. _ 
     Item(1).Properties.Item(1).Value & vbCr 
   MsgBox(msg) 
End Sub

Starten von Projektmappen- und Projektbuilds

Mit Hilfe des Visual Studio .NET-Automationsmodells können Sie Projektmappen- und Projektbuilds programmtechnisch ausführen. Das wichtigste Objekt für diesen Vorgang ist das SolutionBuild-Objekt.
Die Verwendung dieses Objekts bietet Ihnen folgende Möglichkeiten:

  • Erstellen einer Projektmappe durch Aufruf der Build-Methode des SolutionBuild-Objekts.

  • Erstellen eines bestimmten Projekts innerhalb einer Projektmappe durch Aufruf der BuildProject-Methode.

  • Starten eines Debugbuilds der Projektmappe durch Aufruf der Debug-Methode.

  • Weitergeben bestimmter Projekte in einer Projektmappe durch Aufruf der Deploy-Methode.

  • Ausführen des festgelegten Startprojekts durch Aufruf der Run-Methode.

Verschiedene Eigenschaften des SolutionBuild-Objekts ermöglichen Ihnen auch den Zugriff auf folgende Informationen:

  • Die aktive Konfiguration (d.h. die aktuelle Projektmappenkonfiguration, die bei Auftreten eines Projektmappenbuilds verwendet wird).

  • Buildabhängigkeiten (d.h. welche Projekte von anderen abhängen, um korrekt erstellt werden zu können).

  • Der Buildstatus (d.h. ob ein Build jemals in der aktuellen Umgebungssitzung gestartet wurde, ob ein Build momentan aktiv ist oder ob ein Build abgeschlossen wurde).

Das SolutionBuild-Objekt enthält auch eine Clean-Methode, die bei Aufruf compilergenerierte Unterstützungsdateien aus Projekten entfernt, die für die Erstellung in der aktiven Projektmappenkonfiguration gekennzeichnet sind. Weitere SolutionBuild-Eigenschaften stehen ebenfalls zur Verfügung. Eine vollständige Liste finden Sie unter SolutionBuild Object Properties, Methods, and Events (in Englisch).

Das folgende Beispiel zeigt, wie ein Build der aktuellen Projektmappenkonfiguration gestartet wird. Dieses Beispiel setzt eine Buildkonfiguration mit der Bezeichnung "MyBuildConfig" voraus.

Sub SolutionBuildExample() 
  ' Aktuelle Projektmappenkonfiguration erstellen. 
  Dim sb As SolutionBuild = DTE.Solution.SolutionBuild 
  sb.SolutionConfigurations.Item("MyBuildConfig").Activate 
  sb.Build 
End Sub

Das folgende Beispiel zeigt, wie die Erstellung eines bestimmten Projekts und seiner Abhängigkeiten innerhalb einer Projektmappe gestartet wird. Bei diesem Beispiel wird vorausgesetzt, dass eine Buildkonfiguration mit der Bezeichnung "MyBuildConfig" vorhanden ist und dass die aktuelle Projektmappe ein Projekt mit der Bezeichnung "ConsoleApplication1" enthält.

Sub ProjectBuildExample() 
   ' Das angegebene Projekt in der Projektmappe erstellen. 
   Dim sb As SolutionBuild = DTE.Solution.SolutionBuild 
   sb.BuildProject("MyBuildConfig", "ConsoleApplication1", False) 
End Sub

Anmerkung Das WaitForBuildToFinish-Flag bestimmt, ob der Build solange die Kontrolle behält, bis die Buildoperation abgeschlossen ist. Der Standardwert lautet FALSE. Wenn Sie WaitForBuildToFinish auf den Wert FALSE setzen (d.h die Kontrolle wird sofort nach dem Starten eines Builds zurückgegeben), können Sie mit dem BuildDone-Ereignis festlegen, wann der Build abgeschlossen ist.

Projektbuildabhängigkeiten

Das Visual Studio .NET-Buildkonfigurationsmodell ermöglicht Ihnen auch die Definition einer Buildabhängigkeit zwischen zwei Projekten durch Verwendung der BuildDependencies-Eigenschaft. Das folgende Beispiel zeigt, wie Sie Projekt 1 von Projekt 2 abhängig machen, so dass Projekt 2 beim Erstellen der Projektmappe zuerst erstellt werden muss.

Sub BuildDependenciesExample() 
   ' Projekt 1 von Projekt 2 abhängig machen. 
   Dim p1 As Project = DTE.Solution.Item(1)  ' Projekt 1 
   Dim p2 As Project = DTE.Solution.Item(2)  ' Projekt 2 
   Dim sb As SolutionBuild = DTE.Solution.SolutionBuild 
   sb.BuildDependencies.Item(p1.UniqueName).AddProject(p2.UniqueName) 
End Sub

Festlegen eines Startprojekts

Das Startprojekt definiert das Projekt, das ausgeführt wird, wenn Sie den Visual Studio-Debugger starten. Mit der StartupProjects-Eigenschaft des SolutionBuild-Objekts können Sie diese Einstellung programmtechnisch steuern.
Anmerkung Die StartupProjects-Auflistung in der aktuellen Version von Visual Studio .NET ermöglicht Ihnen nur die Festlegung eines einzelnen Startprojekts. In zukünftigen Versionen wird jedoch die Festlegung mehrerer Startprojekte möglich sein.
Das folgende Beispiel zeigt, wie Sie das aktuelle Startprojekt anzeigen und ändern.

Sub StartUpProj() 
   ' Bei diesem Beispiel wird vorausgesetzt, dass die Projektmappe zwei Projekte enthält. 
   Dim sb As SolutionBuild = DTE.Solution.SolutionBuild 
   Dim p1 As Project = DTE.Solution.Item(1)  ' Projekt 1 
   Dim p2 As Project = DTE.Solution.Item(2)  ' Projekt 2 
   MsgBox("Aktuelles Startprojekt: " & sb.StartupProjects(0)) 
   ' Anderes Projekt als Startprojekt festlegen. 
   sb.StartupProjects = p1.UniqueName 
   MsgBox("Neues Startprojekt: " & sb.StartupProjects(0)) 
End Sub

Schlussfolgerung

Das Visual Studio .NET-Automationsbuildmodell bietet eine Reihe von Optionen für die programmtechnische Steuerung von Projektmappen und Projekten sowie deren Buildkonfigurationen. Wenn Sie mehr über das Verhältnis zwischen dem Visual Studio .NET -Automationsbuildmodell und der IDE erfahren möchten, durchsuchen Sie mit dem Objektbrowser die Objekte, die unter "Objekte des Automationsbuildmodells für Projektmappen und Projekte" aufgelistet sind, und vergleichen Sie ihre Elemente mit den verschiedenen Dialogfeldern. Experimentieren Sie mit dem Modell, um mit seiner Funktionsweise vertraut zu werden. Sie können sich auch das "PrePostBuildRules Add-In"-Beispiel auf der Website mit Visual Studio .NET-Automationsbeispielen unter folgender Adresse ansehen: http://msdn.microsoft.com/vstudio/nextgen/automation.asp (in Englisch).


Anzeigen: