Vorgehensweise: Angeben von Buildereignissen (C#)How to: Specify build events (C#)

Verwenden Sie Buildereignisse, um Befehle festzulegen, die vor Beginn oder nach Beenden des Builds ausgeführt werden.Use build events to specify commands that run before the build starts or after the build finishes. Buildereignisse werden nur ausgeführt, wenn der Build die betreffenden Punkte im Buildprozess erfolgreich erreicht.Build events execute only if the build successfully reaches those points in the build process.

Wenn ein Projekt erstellt wird, werden Präbuildereignisse in eine Datei mit dem Namen PreBuildEvent.bat und Postbuildereignisse in eine Datei mit dem Namen PostBuildEvent.bat eingefügt.When a project is built, pre-build events are added to a file named PreBuildEvent.bat and post-build events are added to a file named PostBuildEvent.bat. Wenn Sie das Prüfen auf Fehler festlegen möchten, fügen Sie Ihre eigenen Befehle für die Fehlerprüfung den Buildschritten hinzu.If you want to ensure error checking, add your own error-checking commands to the build steps.

Angeben eines BuildereignissesSpecify a build event

  1. Klicken Sie im Projektmappen-Explorer auf das Projekt, für das Sie das Buildereignis angeben möchten.In Solution Explorer, select the project for which you want to specify the build event.

  2. Klicken Sie im Menü Projekt auf Eigenschaften.On the Project menu, click Properties.

  3. Klicken Sie auf die Registerkarte Buildereignisse.Select the Build Events tab.

  4. Geben Sie im Feld Befehlszeile für Präbuildereignis die Syntax des Buildereignisses an.In the Pre-build event command line box, specify the syntax of the build event.

    Hinweis

    Präbuildereignisse werden nicht ausgeführt, wenn das Projekt auf dem neuesten Stand ist, und es wird kein Build gestartet.Pre-build events do not run if the project is up to date and no build is triggered.

  5. Geben Sie im Feld Befehlszeile für Postbuildereignis die Syntax des Buildereignisses an.In the Post-build event command line box, specify the syntax of the build event.

    Hinweis

    Fügen Sie allen Postbuildbefehlen, die BAT-Dateien ausführen, eine call-Anweisung hinzu.Add a call statement before all post-build commands that run .bat files. Zum Beispiel: call C:\MyFile.bat oder call C:\MyFile.bat call C:\MyFile2.bat.For example, call C:\MyFile.bat or call C:\MyFile.bat call C:\MyFile2.bat.

  6. Geben Sie im Feld Postbuildereignis ausführen das Postbuildereignis als auszuführende Bedingung an.In the Run the post-build event box, specify under what conditions to run the post-build event.

    Hinweis

    Um umfangreiche Syntax hinzuzufügen oder Buildmakros aus den Dialogfeldern „Befehlszeile für Präbuildereignis“ und. „Befehlszeile für Postbuildereignis“ auszuwählen, klicken Sie auf das Symbol mit den Auslassungszeichen ( ... ), damit ein Bearbeitungsfeld angezeigt wird.To add lengthy syntax, or to select any build macros from the Pre-build event/post-build event command line dialog box, click the ellipsis button (...) to display an edit box.

    Die Syntax des Buildereignisses kann beliebige Befehle enthalten, die für eine Eingabeaufforderung oder eine BAT-Datei zulässig sind.The build event syntax can include any command that is valid at a command prompt or in a .bat file. Dem Namen der Batchdatei sollte ein call vorangestellt sein, um sicherzustellen, dass alle nachfolgenden Befehle ausgeführt werden.The name of a batch file should be preceded by call to ensure that all subsequent commands are executed.

    Hinweis

    Wenn Ihr Prä- oder Postbuildereignis nicht erfolgreich abgeschlossen wird, können Sie den Build abschließen, indem Sie Ihre Ereignisaktion mit einem Code, der nicht 0 (null) ist, beenden. Dies gibt eine erfolgreiche Aktion an.If your pre-build or post-build event does not complete successfully, you can terminate the build by having your event action exit with a code other than zero (0), which indicates a successful action.

BeispielExample

In der folgenden Prozedur wird veranschaulicht, wie Sie das mindestens erforderliche Betriebssystem im Anwendungsmanifest mit einem EXE-Befehl festlegen, der von einem Postbuildereignis aus aufgerufen wird (die EXE.MANIFEST-Datei im Projektverzeichnis).The following procedure shows how to set the minimum operating system version in the application manifest by using an .exe command that is called from a post-build event (the .exe.manifest file in the project directory). Das mindestens erforderliche Betriebssystem ist eine Zahlenfolge mit vier Teilen wie z.B. 4.10.0.0.The minimum operating system version is a four-part number such as 4.10.0.0. Der Befehl ändert den Abschnitt <dependentOS> des Manifests, um die mindestens erforderliche Betriebssystemversion festzulegen:To set the minimum operating system version, the command will change the <dependentOS> section of the manifest:

<dependentOS>
   <osVersionInfo>
      <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
   </osVersionInfo>
</dependentOS>

Erstellen eines EXE-Befehls zum Ändern des AnwendungsmanifestsCreate an .exe command to change the application manifest

  1. Erstellen Sie ein neues Konsolen-App-Projekt für den Befehl.Create a new Console App project for the command. Nennen Sie das Projekt ChangeOSVersionCS.Name the project ChangeOSVersionCS.

  2. Fügen Sie in Program.cs die folgende Zeile in die anderen using-Anweisungen am Anfang der Datei ein:In Program.cs, add the following line to the other using directives at the top of the file:

    using System.Xml;
    
  3. Ersetzen Sie im ChangeOSVersionCS-Namespace die Program-Klassenimplementierung durch den folgenden Code:In the ChangeOSVersionCS namespace, replace the Program class implementation with the following code:

    class Program
    {
       /// <summary>
       /// This function sets 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 akzeptiert zwei Argumente: den Pfad des Anwendungsmanifests (also den Ordner, in dem der Buildprozess das Manifest erstellt, in der Regel projektname.publish), und die neue Version des Betriebssystems.The command takes two arguments: the path of the application manifest (that is, the folder in which the build process creates the manifest, typically Projectname.publish), and the new operating system version.

  4. Erstellen Sie das Projekt.Build the project.

  5. Kopieren Sie die EXE-Datei z.B. in das Verzeichnis C:\TEMP\ChangeOSVersionVB.exe.Copy the .exe file to a directory such as C:\TEMP\ChangeOSVersionVB.exe.

Rufen Sie als Nächstes den Befehl in einem Postbuildereignis auf, um das Anwendungsmanifest zu modifizieren.Next, invoke this command in a post-build event to modify the application manifest.

Aufrufen eines Postbuildereignisses, um das Anwendungsmanifest zu ändernInvoke a post-build event to modify the application manifest

  1. Erstellen Sie ein neues Windows Forms-Appt, und benennen Sie es CSWinApp.Create a new Windows Forms App project and name it CSWinApp.

  2. Wählen Sie für das im Projektmappen-Explorer ausgewählte Projekt im Menü Projekt Eigenschaften aus.With the project selected in Solution Explorer, on the Project menu, choose Properties.

  3. Suchen Sie im Projekt-Designer die Seite Veröffentlichen, und legen Sie den Veröffentlichungsort auf C:\TEMP fest.In the Project Designer, locate the Publish page and set Publishing location to C:\TEMP.

  4. Veröffentlichen Sie das Projekt, indem Sie auf Jetzt veröffentlichen klicken.Publish the project by clicking Publish Now.

    Dann wird die Manifestdatei erstellt und unter C:\TEMP\CSWinApp_1_0_0_0\CSWinApp.exe.manifest gespeichert.The manifest file is built and saved to C:\TEMP\CSWinApp_1_0_0_0\CSWinApp.exe.manifest. Um die Manifestdatei anzuzeigen, klicken Sie mit der rechten Maustaste auf die Datei, klicken Sie auf Öffnen mit, dann auf Programm aus einer Liste auswählen und anschließend auf Editor.To view the manifest, right-click the file, click Open with, select Select the program from a list, and then click Notepad.

    Durchsuchen Sie die Datei nach dem <osVersionInfo>-Element.Search in the file for the <osVersionInfo> element. Die Version kann z.B. folgende sein:For example, the version might be:

    <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
    
  5. Klicken Sie jetzt wieder im Projekt-Designer auf die Registerkarte Buildereignisse, und klicken Sie anschließend auf Postbuild bearbeiten.Back in the Project Designer, click the Build Events tab and then click Edit Post-build.

  6. Geben Sie im Feld Befehlszeile für Postbuildereignis den folgenden Befehl ein:In the Post-build Event Command Line box, enter the following command:

    C:\TEMP\ChangeOSVersionCS.exe "$(TargetPath).manifest" 5.1.2600.0

    Wenn Sie das Projekt erstellen, ändert dieser Befehl das mindestens erforderliche Betriebssystem im Anwendungsmanifest in 5.1.2600.0.When you build the project, this command changes the minimum operating system version in the application manifest to 5.1.2600.0.

    Da das Makro $(TargetPath) den vollständigen Pfad für das ausführbare Element angibt, das gerade erstellt wird, gibt $(TargetPath).manifest das im Verzeichnis bin erstellte Anwendungsmanifest an.Because the $(TargetPath) macro expresses the full path for the executable being created, $(TargetPath).manifest specifies the application manifest created in the bin directory. Durch die Veröffentlichung wird dieses Manifest an den Veröffentlichungsspeicherort kopiert, den Sie in einem vorherigen Schritt festgelegt haben.Publishing copies this manifest to the publishing location that you set earlier.

  7. Veröffentlichen Sie das Projekt erneut.Publish the project again.

    Jetzt sollte die Manifestversion folgendermaßen lauten:The manifest version should now read:

    <os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />
    

Weitere InformationenSee also