Share via


Comment : spécifier des événements de génération (C#)

Mise à jour : novembre 2007

Utilisez des événements de génération pour spécifier des commandes à exécuter avant que la génération commence ou après qu'elle se termine. Les événements de génération sont exécutés uniquement si la génération atteint ces étapes du processus de génération.

Lorsqu'un projet est généré, les événements avant génération sont ajoutés à un fichier nommé PreBuildEvent.bat et les événements après génération sont ajoutés à un fichier nommé PostBuildEvent.bat. Si vous souhaitez garantir la vérification des erreurs, ajoutez vos propres commandes de vérification d'erreurs aux étapes de génération.

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Comment : spécifier des événements avant génération et après génération

Pour spécifier un événement de génération

  1. Dans l'Explorateur de solutions, sélectionnez le projet pour lequel vous voulez spécifier l'événement de génération.

  2. Dans le menu Projet, cliquez sur Propriétés.

  3. Sélectionnez l'onglet Événements de génération.

  4. Dans la zone Ligne de commande de l'événement avant génération, spécifiez la syntaxe de l'événement de génération.

    Remarque :

    Les événements avant génération ne s'exécutent pas si le projet est à jour et si aucune génération n'est déclenchée.

  5. Dans la zone Ligne de commande de l'événement près génération, spécifiez la syntaxe de l'événement de génération.

    Remarque :

    Ajoutez une instruction call avant toutes les commandes après génération qui exécutent des fichiers .bat. Par exemple, call C:\MyFile.bat ou call C:\MyFile.bat call C:\MyFile2.bat.

  6. Dans la zone Exécuter l'événement après génération, spécifiez sous quelles conditions exécuter l'événement après génération.

    Remarque :

    Pour ajouter une syntaxe longue ou sélectionner des macros de génération à partir de Ligne de commande de l'événement avant/après génération, boîte de dialogue, cliquez sur le bouton de sélection (…) pour afficher une zone d'édition.

    La syntaxe de l'événement de génération peut inclure toute commande valide sur l'invite de commandes ou dans un fichier .bat. Le nom d'un fichier batch doit être précédé de call pour garantir l'exécution de toutes les commandes suivantes.

Remarque Si votre événement avant ou après génération ne se termine pas correctement, vous pouvez terminer la génération en quittant l'action d'événement avec un code autre que zéro (0), qui indique une action réussie.

Exemple : comment modifier les informations de manifeste à l'aide d'un événement après génération

La procédure suivante montre comment définir la version minimale du système d'exploitation dans le manifeste de l'application à l'aide d'une commande .exe appelée à partir d'un événement après génération (le fichier .exe.manifest dans le répertoire du projet). La version minimale du système d'exploitation est un nombre en quatre parties, tel que 4.10.0.0. À cette fin, la commande modifie la section <dependentOS> du manifeste :

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

Pour créer une commande .exe afin de modifier le manifeste de l'application

  1. Créez une application console pour la commande. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans la boîte de dialogue Nouveau projet, développez Visual C#, cliquez sur Windows, puis sur le modèle Application console. Nommez le projet ModifierVersionSECS.

  3. Dans Program.cs, ajoutez la ligne suivante aux autres instructions using en haut du fichier :

    using System.Xml;
    
  4. Dans l'espace de noms ChangeOSVersionCS, remplacez l'implémentation de la classe Program par le code suivant :

    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);
       }
    }
    

    La commande prend deux arguments : le chemin d'accès du manifeste de l'application (autrement dit, le dossier dans lequel le processus de génération crée le manifeste, en général NomProjet.publish), et la nouvelle version du système d'exploitation.

  5. Générez le projet. Dans le menu Générer, cliquez sur Générer la solution.

  6. Copiez le fichier .exe vers un répertoire tel que C:\TEMP\ModifierVersionSEVB.exe.

Ensuite, appelez cette commande dans un événement après génération pour modifier le manifeste de l'application.

Pour appeler un événement après génération afin de modifier le manifeste de l'application

  1. Créez une application Windows pour le projet à publier. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans la boîte de dialogue Nouveau projet, développez Visual C#, cliquez sur Windows, puis sur le modèle Application Windows Forms. Nommez le projet AppWinCS.

  3. Un projet étant sélectionné dans l'Explorateur de solutions, cliquez dans le menu Projet sur Propriétés.

  4. Dans le Concepteur de projets, accédez à la page Publier et définissez Emplacement de publication avec la valeur C:\TEMP\.

  5. Publiez le projet en cliquant sur Publier maintenant.

    Le fichier manifeste est généré et placé dans C:\TEMP\CSWinApp_1_0_0_0\CSWinApp.exe.manifest. Pour consulter le manifeste, cliquez avec le bouton droit sur le fichier et cliquez sur Ouvrir avec, puis sur Sélectionner le programme dans une liste, puis cliquez sur Bloc-notes.

    Recherchez l'élément <osVersionInfo> dans le fichier. Par exemple, la version peut être la suivante :

    <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
    
  6. Dans le Concepteur de projets, cliquez sur l'onglet Événements de génération et cliquez sur le bouton Modifier après génération.

  7. Dans la zone Ligne de commande de l'événement après génération, tapez la commande suivante :

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

    Lorsque vous générez le projet, cette commande change la version minimale du système d'exploitation dans le manifeste de l'application en 5.1.2600.0.

    Dans la mesure où la macro $(TargetPath) exprime le chemin d'accès complet pour le fichier exécutable en cours de création, $(TargetPath).manifest spécifie le manifeste de l'application créé dans le répertoire bin. La publication copie ce manifeste vers l'emplacement de publication que vous définissez précédemment.

  8. Publiez à nouveau le projet. Allez à la page Publier et cliquez sur Publier maintenant.

    Consultez à nouveau le manifeste. Pour consulter le manifeste, accédez au répertoire de publication, cliquez avec le bouton droit sur le fichier et cliquez sur Ouvrir avec, puis sur Sélectionner le programme dans une liste et sur Bloc-notes.

    La version doit maintenant être :

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

Voir aussi

Tâches

Comment : spécifier des événements de génération (Visual Basic)

Référence

Événements de génération, page du Concepteur de projets (C#)

Ligne de commande de l'événement avant/après génération, boîte de dialogue

Autres ressources

Génération dans Visual Studio