Générer des applications .NET ClickOnce à partir de la ligne de commande

Dans Visual Studio, vous pouvez générer des projets à partir de la ligne de commande, même s’ils sont créés dans l’environnement de développement intégré (IDE). En fait, vous pouvez regénérer un projet créé avec Visual Studio sur un autre ordinateur sur lequel seul .NET 5 ou version ultérieure est installé. Cette capacité vous permet de reproduire une build au moyen d’un processus automatisé, par exemple dans un labo de build central ou avec des techniques de script avancées qui dépassent le cadre de la génération du projet lui-même.

Remarque

Pour générer des applications ClickOnce .NET Framework à partir de la ligne de commande, consultez Générer des applications ClickOnce à partir de la ligne de commande.

Utiliser MSBuild pour reproduire les déploiements d’applications ClickOnce .NET

Quand vous appelez msbuild /target:publish à partir de la ligne de commande, cette commande indique au système MSBuild de générer le projet et de créer une application ClickOnce dans le dossier de publication. Cette commande équivaut à sélectionner la commande Publier dans l’environnement IDE.

Cette commande exécute msbuild.exe, dont le chemin est indiqué dans l’environnement d’invite de commandes Visual Studio.

Une « cible » est un indicateur pour MSBuild sur la manière de traiter la commande. Les cibles principales sont la cible « build » et la cible « publier ». La cible « build » équivaut à sélectionner la commande Build (ou à appuyer sur F5) dans l’environnement IDE. Si vous souhaitez uniquement générer votre projet, vous pouvez entrer msbuild. Cette commande fonctionne, car la cible de build est la cible par défaut pour tous les projets générés par Visual Studio. Ainsi, vous n’avez pas besoin de spécifier explicitement la cible de build. Par conséquent, entrer msbuild équivaut à entrer msbuild /target:build.

La commande /target:publish indique à MSBuild d’appeler la cible de publication. La cible de publication dépend de la cible de build, ce qui signifie que l’opération de publication est un sur-ensemble de l’opération de build. Par exemple, si vous avez apporté une modification à des fichiers sources Visual Basic ou C#, l’opération de publication regénère automatiquement l’assembly correspondant.

Pour plus d’informations sur la génération d’un déploiement ClickOnce complet à l’aide de l’outil en ligne de commande Mage.exe pour créer votre manifeste ClickOnce, consultez Procédure pas à pas : Déployer manuellement une application ClickOnce.

Créer et générer une application ClickOnce de base avec MSBuild

Le moyen le plus simple pour créer un profil de publication consiste à utiliser Visual Studio. Un profil de publication est nécessaire pour publier avec MSBuild.

Créer et publier un projet ClickOnce

  1. Ouvrez Visual Studio et créez un projet.

    Choisissez le modèle de projet Application Windows Forms ou Application WPF, nommez le projet CmdLineDemo, puis créez le projet.

  2. Cliquez avec le bouton droit sur le projet dans l’Explorateur de solutions, puis sélectionnez Publier.

    Cette étape garantit que le projet est correctement configuré pour produire un déploiement d’application ClickOnce.

    La page Publier apparaît.

  3. Dans la page Publier, sélectionnez Ajouter un profil de publication, ClickOnce, puis Terminer.

    Pour cet exercice, vous pouvez ignorer les autres paramètres de configuration de la page Publier.

  4. Une fois le processus terminé, sélectionnez Fermer pour quitter la boîte de dialogue Publier.

  5. Cliquez sur Publier.

    Visual Studio génère la sortie de déploiement ClickOnce.

  6. Enregistrez votre projet et notez l’emplacement du dossier dans lequel il est stocké.

    Les étapes précédentes créent un projet ClickOnce qui a été publié pour la première fois. Vous pouvez maintenant reproduire la build en dehors de l’environnement IDE.

Reproduire la build à partir de la ligne de commande

  1. Quittez Visual Studio.

  2. Dans le menu Démarrer de Windows, sélectionnez Outils>Ligne de commande>Invite de commandes développeur.

    L’Invite de commandes développeur Visual Studio s’ouvre.

  3. Dans l’invite de commandes Visual Studio, vérifiez que le répertoire actif montre l’emplacement du projet que vous avez généré.

    Si vous ne travaillez pas dans le répertoire du projet, entrez une commande pour basculer vers l’emplacement souhaité, par exemple chdir C:\Users\username\source\repos\CmdLineDemo.

  4. Pour supprimer les fichiers existants générés dans la section précédente, entrez rmdir /s publish.

    Cette étape est facultative, mais elle garantit que la build de ligne de commande produit tous les nouveaux fichiers.

    Pour .NET 5 et versions ultérieures, la génération d’applications ClickOnce .NET à partir de la ligne de commande est une expérience similaire. La seule différence est que vous devez fournir une propriété supplémentaire pour le profil de publication sur la ligne de commande MSBuild.

  5. Entrez msbuild /target:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>".

    Les étapes précédentes produisent un déploiement complet d’application ClickOnce dans un sous-dossier de votre projet nommé publish. CmdLineDemo.application est le manifeste de déploiement ClickOnce. Le dossier CmdLineDemo_1.0.0.0 contient les fichiers CmdLineDemo.exe et CmdLineDemo.exe.manifest, le manifeste d’application ClickOnce. Setup.exe est le programme d’amorçage configuré par défaut pour installer .NET. Les fichiers de ce dossier comprennent l’ensemble des fichiers nécessaires pour déployer votre application sur le web, via UNC ou un CD/DVD.

Remarque

Le système MSBuild utilise l’option PublishDir pour spécifier l’emplacement de sortie, tel que msbuild /t:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>".

Publier la sortie du processus

MSBuild utilise la propriété PublishDir pour définir l’emplacement de la sortie de build, y compris les artefacts de build. La valeur PublishDir utilisée par MSBuild comme destination pour la publication est obtenue par défaut à partir de la propriété PublishDir dans le fichier .pubxml (.NET). Vous pouvez également remplacer ce comportement sur la ligne de commande MSBuild en utilisant le commutateur /p. Si vous remplacez le paramètre, la sortie de publication va à l’emplacement spécifié. La sortie est générée lors de l’étape MSBuild de la publication. Toute cible MSBuild avec AfterTargets="ClickOncePublish" s’exécute après la réalisation de cette copie.

La propriété PublishUrl, contrairement à PublishDir, n’est pas utilisée dans l’étape MSBuild. PublishUrl est ignoré lorsque vous appelez MSBuild directement pour publier à partir de la ligne de commande.

Quand la publication est démarrée dans l’IDE Visual Studio, Visual Studio appelle MSBuild pour publier les artefacts à l’emplacement PublishDir. Une fois cette étape MSBuild terminée, Visual Studio publie des fichiers propres à ClickOnce à l’emplacement pointé par PublishUrl. Cette deuxième étape s’exécute au sein du processus Visual Studio. Vous ne pouvez pas injecter de cible/tâche à exécuter pendant cette étape, car il s’agit d’un processus Visual Studio.

Pour les déploiements MSBuild qui n’utilisent pas Visual Studio, copiez tous les fichiers du répertoire de déploiement dans la destination ou le média de déploiement. Le répertoire de déploiement peut être un dossier sur un site web ou un site FTP, un partage de fichiers ou un CD-ROM. Par exemple, vous pouvez utiliser un outil tiers ou une tâche MSBuild personnalisée pour copier les fichiers ClickOnce.

Pour tout post-traitement dans le dossier PublishUrl, vous devez disposer d’un script distinct.

Important

Si PublishDir est définie sur le même emplacement que PublishUrl, la sortie de compilation en double est copiée à l’emplacement PublishUrl. Vous pouvez éviter ce problème dans Visual Studio 2022 version 17.4 et ultérieure en créant un profil. Le nouveau profil définit PublishDir sur un emplacement différent de PublishUrl. À la fin de l’opération de publication, les fichiers ClickOnce appropriés sont copiés à partir de l’emplacement PublishDir vers PublishUrl.

Propriétés de publication

Quand vous publiez l’application en appliquant les procédures précédentes, les propriétés suivantes sont insérées dans le fichier de profil de publication des projets .NET (.NET 5 et versions ultérieures). Ces propriétés influencent directement la manière dont l’application ClickOnce est produite.

Dans .pubxml :

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

Vous pouvez remplacer ces propriétés sur la ligne de commande sans modifier le fichier projet lui-même. Par exemple, le code suivant génère le déploiement de l’application ClickOnce sans le programme d’amorçage :

msbuild /target:publish /p:PublishProfile=<pubxml file> /property:BootstrapperEnabled=false

Les propriétés de publication sont contrôlées dans Visual Studio dans les pages de propriétés Publier, Sécurité et Signature du Concepteur de projets. Pour les projets .NET (.NET 5 et versions ultérieures), ces paramètres sont fournis dans le fichier pubxml, auquel vous pouvez accéder dans Visual Studio à l’aide de l’outil Publier.

Les propriétés de publication suivantes sont définies dans différentes pages de propriétés du concepteur d’application.

  • AssemblyOriginatorKeyFile détermine le fichier de clé utilisé pour signer les manifestes de votre application ClickOnce. Cette même clé peut également être utilisée pour attribuer un nom fort à vos assemblys. Cette propriété est définie dans la page Signature du Concepteur de projets. Pour les applications .NET Windows, ce paramètre reste dans le fichier projet.

Les propriétés suivantes sont définies dans la page Publier :

  • PublishUrl correspond à l’emplacement où l’application est publiée dans l’IDE. Cette propriété est insérée dans le manifeste de l’application ClickOnce si les propriétés InstallUrl et UpdateUrl ne sont pas spécifiées.

  • ApplicationVersion spécifie la version de l’application ClickOnce. La version est un nombre à quatre chiffres. Si le dernier chiffre est un « * » (astérisque), ApplicationRevision remplace la valeur insérée dans le manifeste au moment de la génération.

  • ApplicationRevision spécifie la révision. Cette valeur est un entier incrémenté à chaque publication dans l’environnement IDE. Notez qu’elle n’est pas incrémentée automatiquement pour les builds effectuées sur la ligne de commande.

  • Install détermine si l’application est une application installée ou exécutée à partir du web.

  • InstallUrl (non affichée) est l’emplacement à partir duquel les utilisateurs installent l’application. Si cette valeur est spécifiée, elle est enregistrée définitivement dans le programme d’amorçage setup.exe si la propriété IsWebBootstrapper est activée. Elle est également insérée dans le manifeste de l’application si UpdateUrl n’est pas spécifiée.

  • SupportUrl (non affiché) est l’emplacement lié dans la boîte de dialogue Ajout/Suppression de programmes d’une application installée.

Les propriétés suivantes sont définies dans la boîte de dialogue Mises à jour des applications, accessible à partir de la page Publier.

  • UpdateEnabled indique si l’application doit rechercher des mises à jour.

  • UpdateMode spécifie les mises à jour de premier plan. Pour les projets .NET (.NET 5 et versions ultérieures), l’arrière-plan n’est pas pris en charge.

  • UpdateUrl (non affichée) est l’emplacement à partir duquel l’application reçoit les mises à jour. Si elle est spécifiée, cette valeur est insérée dans le manifeste d’application.

Les propriétés suivantes sont définies dans la boîte de dialogue Options de publication, accessible à partir de la page Publier.

  • PublisherName spécifie le nom de l’éditeur affiché dans l’invite affichée lors de l’installation ou de l’exécution de l’application. Pour une application installée, cette propriété est également utilisée pour spécifier le nom du dossier dans le menu Démarrer.

  • ProductName spécifie le nom du produit affiché dans l’invite affichée lors de l’installation ou de l’exécution de l’application. Pour une application installée, cette propriété est également utilisée pour spécifier le nom du raccourci dans le menu Démarrer.

Les propriétés suivantes sont définies dans la boîte de dialogue Prérequis, accessible à partir de la page Publier.

  • BootstrapperEnabled détermine si le programme d’amorçage setup.exe doit être généré.

  • IsWebBootstrapper détermine si le programme d’amorçage setup.exe fonctionne sur le web ou en mode sur disque.

Utiliser des options : InstallURL, SupportUrl, PublishURL, UpdateURL

Le tableau suivant présente les quatre options d’URL pour le déploiement ClickOnce.

Option URL Description
PublishURL Requise pour publier l’application ClickOnce sur un site web.
InstallURL facultatif. Définissez cette option URL si le site d’installation est différent de PublishURL. Vous pouvez par exemple définir PublishURL sur un chemin FTP et définir InstallURL sur une URL web.
SupportURL facultatif. Définissez cette option URL si le site de support est différent de PublishURL. Vous pouvez par exemple définir SupportURL sur le site web du service clientèle de votre entreprise.
UpdateURL facultatif. Définissez cette option URL si l’emplacement de mise à jour est différent de InstallURL. Vous pouvez par exemple définir PublishURL sur un chemin FTP et définir UpdateURL sur une URL web.