Projekte automatisiert bauen mit MSBuild

07 November 2010
Thomas Fiehn

Das Bauen eines Softwareprojekts – Build-Vorgang genannt – ist für größere Projekte eine komplexe Aufgabe. Besteht dieser Vorgang für ein kleines Projekt womöglich nur aus dem Kompilieren des Quelltextes, so sind für größere Projekte dagegen oftmals sehr viele verschiedene Schritte notwendig.

Zum Beispiel könnten die folgenden Schritte automatisiert ausgeführt werden:

Update der Versionsnummern, Erstellung der Quelltext-Dokumentation, Erstellung von Create- beziehungsweise Update-Scripts für die Datenbank, Kompilieren des Projekts und das Kopieren aller zum Projekt gehörigen Dateien (Quelltext, Dokumentation,…). Diese Liste lässt sich beliebig fortsetzen.

Daran lässt sich erkennen, dass es weder zeit- noch kosteneffizient ist, diese Schritte alle manuell von Hand auszuführen. Das bedeutet, dass dieser Vorgang automatisiert ablaufen muss.

Microsoft Build Engine (MSBuild) ist die Build-Plattform von Microsoft. Mit MSBuild kann der Build-Prozess automatisiert werden. Dazu wird in einer XML-Projektdatei festgelegt, wie der Build-Vorgang ablaufen soll. Die einzelnen Aufgaben und deren Reihenfolge können definiert werden. Es können sowohl von Microsoft bereitgestellte Aufgaben wie zum Beispiel „Copy“ zum Kopieren von Dateien oder „Exec“ zum Ausführen von Befehlen in der Eingabeaufforderung, als auch eigene Aufgaben verwendet werden. Eigene Aufgaben können definiert werden, indem man einen Typ erstellt, der das „ITask“ Interface implementiert. In den Zielen (Targets) werden Aufgaben zusammengefasst und definieren so einen bestimmten Schritt im Build-Vorgang.

Das folgende Beispiel zeigt eine MSBuild-Projektdatei, die ein Target mit zwei Aufgaben hat. Zuerst wird ein Verzeichnis erstellt und danach werden Dateien aus einem anderen Verzeichnis in das neue Verzeichnis kopiert.

  1. ProjectDefaultTargets="TestTarget"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">TargetName="TestTarget">MakeDirDirectories=".\TestOutputFolder"/>ExecCommand="xcopy .\TestInputFolder\*.* .\TestOutputFolder\*.*"/>/Target>/Project>

Die Projektdatei wird verarbeitet, beziehungsweise der Build-Prozess wird ausgeführt, sobald man die „MSBuild.exe“, die sich im .NET-Framework Verzeichnis befindet, ausführt und ihr als Parameter die Projektdatei übergibt.

Hat man sich erst einmal ein MSBuild-Script geschrieben, dann ist der Weg zum fertigen Build nur noch einen Tastendruck entfernt. Außerdem kann solch ein Script mit geringen Anpassungen auch für zukünftige Projekte verwendet werden.