Gewusst wie: Angeben von Buildereignissen (C#)
Aktualisiert: November 2007
Mithilfe von Buildereignissen können Befehle festgelegt werden, die vor dem Buildvorgang oder nach dem Buildvorgang ausgeführt werden. Buildereignisse werden nur dann ausgeführt, wenn im Buildvorgang diese Punkte erfolgreich erreicht werden.
Bei der Erstellung eines Projekts werden Präbuildereignisse in einer Datei mit der Bezeichnung PreBuildEvent.bat abgelegt und Postbuildereignisse in einer Datei mit der Bezeichnung PostBuildEvent.bat. Wenn eine Fehlerüberprüfung erfolgen soll, fügen Sie den Buildschritten eigene Befehle für die Fehlerüberprüfung hinzu.
Hinweis: |
---|
Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen. |
So legen Sie Präbuild- und Postbuildereignisse fest
So legen Sie ein Buildereignis fest
Wählen Sie im Projektmappen-Explorer das Projekt aus, für das das Buildereignis festgelegt werden soll.
Klicken Sie im Menü Projekt auf Eigenschaften.
Wählen Sie die Registerkarte Buildereignisse aus.
Geben Sie im Feld Befehlszeile für Präbuildereignis die Syntax des Buildereignisses an.
Hinweis: Präbuildereignisse werden nicht ausgeführt, wenn das Projekt aktuell ist und kein Build ausgelöst wird.
Geben Sie im Feld Befehlszeile für Postbuildereignis die Syntax des Buildereignisses an.
Hinweis: Fügen Sie vor allen Postbuildbefehlen, die BAT-Dateien ausführen, eine call-Anweisung hinzu. Beispielsweise call C:\MyFile.bat oder call C:\MyFile.bat call C:\MyFile2.bat.
Geben Sie im Feld Postbuildereignis ausführen die Bedingungen an, unter denen das Postbuildereignis ausgeführt werden soll.
Hinweis: Um längere Syntax hinzuzufügen oder im Dialogfeld "Befehlszeile für Präbuildereignis"/"Befehlszeile für Postbuildereignis" Buildmakros auszuwählen, klicken Sie auf die Schaltfläche mit den Auslassungszeichen (…), um ein Eingabefeld anzuzeigen.
Die Syntax für das Buildereignis kann jeden in einer Eingabeaufforderung oder in einer BAT-Datei zulässigen Befehl enthalten. Dem Namen einer Batchdatei sollte call vorangestellt werden, damit alle folgenden Befehle ausgeführt werden.
Hinweis Wenn das Präbuild- oder Postbuildereignis nicht erfolgreich abgeschlossen wird, können Sie den Buildprozess beenden, indem Sie die Ereignisaktion mit einem Code beenden, der nicht Null (0) ist (dies würde eine erfolgreiche Aktion bezeichnen).
Beispiel: So ändern Sie Manifestinformationen mit einem Postbuildereignis
Das folgende Verfahren zeigt, wie Sie die minimale Betriebssystemversion im Anwendungsmanifest mit einem EXE-Befehl festlegen, den Sie aus einem Postbuildereignis (die EXE-Manifestdatei im Projektverzeichnis) aufrufen. Die minimale Betriebssystemversion ist eine vierstellige Zahl wie 4.10.0.0. Hierfür ändert der Befehl den Abschnitt <dependentOS> des Manifests:
<dependentOS>
<osVersionInfo>
<os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
</osVersionInfo>
</dependentOS>
So erstellen Sie einen EXE-Befehl zum Ändern des Anwendungsmanifests
Erstellen Sie eine Konsolenanwendung für den Befehl. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual C#, klicken Sie auf Windows und dann auf die Vorlage Konsolenanwendung. Nennen Sie das Projekt ChangeOSVersionCS.
Fügen Sie den anderen using-Anweisungen oben in der Datei Program.cs die folgende Zeile hinzu:
using System.Xml;
Ersetzen Sie im ChangeOSVersionCS-Namespace die Program-Klassenimplementierung durch den folgenden Code:
class Program { /// <summary> /// This function will set the minimum operating system version for a ClickOnce application. /// </summary> /// <param name="args"> /// Command Line Arguments: /// 0 - Path to application manifest (.exe.manifest). /// 1 - Version of OS ///</param> static void Main(string[] args) { string applicationManifestPath = args[0]; Console.WriteLine("Application Manifest Path: " + applicationManifestPath); // Get version name. Version osVersion = null; if (args.Length >=2 ){ osVersion = new Version(args[1]); }else{ throw new ArgumentException("OS Version not specified."); } Console.WriteLine("Desired OS Version: " + osVersion.ToString()); XmlDocument document; XmlNamespaceManager namespaceManager; namespaceManager = new XmlNamespaceManager(new NameTable()); namespaceManager.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1"); namespaceManager.AddNamespace("asmv2", "urn:schemas-microsoft-com:asm.v2"); document = new XmlDocument(); document.Load(applicationManifestPath); string baseXPath; baseXPath = "/asmv1:assembly/asmv2:dependency/asmv2:dependentOS/asmv2:osVersionInfo/asmv2:os"; // Change minimum required operating system version. XmlNode node; node = document.SelectSingleNode(baseXPath, namespaceManager); node.Attributes["majorVersion"].Value = osVersion.Major.ToString(); node.Attributes["minorVersion"].Value = osVersion.Minor.ToString(); node.Attributes["buildNumber"].Value = osVersion.Build.ToString(); node.Attributes["servicePackMajor"].Value = osVersion.Revision.ToString(); document.Save(applicationManifestPath); } }
Der Befehl verwendet zwei Argumente: den Pfad zum Anwendungsmanifest (d. h., den Ordner, in dem der Buildprozess das Manifest erstellt; normalerweise Projectname.publish) und die neue Betriebssystemversion.
Erstellen Sie das Projekt. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
Kopieren Sie die EXE-Datei in ein Verzeichnis, z. B. C:\TEMP\ChangeOSVersionVB.exe.
Rufen Sie anschließend den Befehl in einem Postbuildereignis auf, um das Anwendungsmanifest zu ändern.
So rufen Sie ein Postbuildereignis auf, um das Anwendungsmanifest zu ändern
Erstellen Sie eine Windows-Anwendung für das Projekt, das veröffentlicht werden soll. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual C#, klicken Sie auf Windows und dann auf die Vorlage Windows Forms-Anwendung. Nennen Sie das Projekt CSWinApp.
Wählen Sie das Projekt im Projektmappen-Explorer aus, und klicken Sie im Menü Projekt auf Eigenschaften.
Navigieren Sie im Projekt-Designer zur Seite Veröffentlichen, und wählen Sie als Veröffentlichungsort das Verzeichnis C:\TEMP\ aus.
Veröffentlichen Sie das Projekt, indem Sie auf Jetzt veröffentlichen klicken.
Die Manifestdatei wird erstellt und im Verzeichnis C:\TEMP\CSWinApp_1_0_0_0\CSWinApp.exe.manifest abgelegt. Um das Manifest zu öffnen, klicken Sie mit der rechten Maustaste auf die Datei, klicken auf Öffnen mit, wählen Programm aus einer Liste auswählen und klicken schließlich auf Editor.
Suchen Sie das <osVersionInfo>-Element in der Datei. Die Version könnte beispielsweise folgendermaßen aussehen:
<os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
Klicken Sie im Projekt-Designer auf die Registerkarte Buildereignisse, und klicken Sie auf die Schaltfläche Postbuild bearbeiten.
Geben Sie im Feld Befehlszeile für Postbuildereignis den folgenden Befehl ein:
C:\TEMP\ChangeOSVersionCS.exe "$(TargetPath).manifest" 5.1.2600.0
Wenn Sie das Projekt erstellen, wird durch diesen Befehl die minimale Betriebssystemversion im Anwendungsmanifest in 5.1.2600.0 geändert.
Da das $(TargetPath)-Makro den vollständigen Pfad für die erstellte EXE-Datei ausdrückt, gibt $(TargetPath).manifest das im BIN-Verzeichnis erstellte Anwendungsmanifest an. Beim Veröffentlichen wird dieses Manifest in den zuvor festgelegten Veröffentlichungsort kopiert.
Veröffentlichen Sie das Projekt erneut. Wechseln Sie zur Seite Veröffentlichen, und klicken Sie auf Jetzt veröffentlichen.
Zeigen Sie das Manifest erneut an. Um das Manifest zu öffnen, wechseln Sie in das Veröffentlichungsverzeichnis, klicken mit der rechten Maustaste auf die Datei, klicken auf Öffnen mit, wählen Programm aus einer Liste auswählen und klicken schließlich auf Editor.
Die Version sollte nun folgendermaßen aussehen:
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />
Siehe auch
Aufgaben
Gewusst wie: Festlegen von Buildereignissen (Visual Basic)
Referenz
Seite "Buildereignisse", Projekt-Designer (C#)
Dialogfeld "Befehlszeile für Präbuildereignis"/"Befehlszeile für Postbuildereignis"