Générer des applications 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 régénérer un projet créé avec Visual Studio sur un autre ordinateur sur lequel seul .NET Framework 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 à partir de la ligne de commande, consultez Générer des applications .NET ClickOnce à partir de la ligne de commande.

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

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 (.NET Framework) ou Application WPF (.NET Framework) et nommez le projet CmdLineDemo.

  2. Dans le menu Build, sélectionnez la commande Publier.

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

    L'Assistant Publication apparaît.

  3. Dans l’Assistant Publication, sélectionnez Terminer.

    Visual Studio génère et affiche la page web par défaut, appelée Publish.htm.

  4. 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.

  5. Entrez msbuild /target:publish.

    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 Framework. Le dossier DotNetFX contient les fichiers redistribuables pour le .NET Framework. Les fichiers de cet emplacement 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: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 projet (.NET Framework). Vous pouvez 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 ci-dessus, les propriétés suivantes sont insérées dans votre fichier projet par l’Assistant Publication. Ces propriétés influencent directement la manière dont l’application ClickOnce est produite.

Dans CmdLineDemo.vbproj / CmdLineDemo.csproj :

<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>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

Pour les projets .NET Framework, vous pouvez écraser 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 /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.

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.

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

  • L’option Activer les paramètres de sécurité ClickOnce détermine si des manifestes ClickOnce sont générés. Quand un projet est créé initialement, la génération d’un manifeste ClickOnce est désactivée par défaut. L’Assistant active automatiquement cet indicateur lors de la première publication.

  • TargetZone détermine le niveau de confiance à émettre dans le manifeste de votre application ClickOnce. Les valeurs possibles sont « Internet », « LocalIntranet » et « Custom ». Les valeurs Internet et LocalIntranet entraînent l’émission d’un jeu d’autorisations par défaut dans votre manifeste d’application ClickOnce. LocalIntranet est la valeur par défaut et signifie essentiellement une confiance totale. La valeur Personnalisé spécifie que seules les autorisations spécifiées explicitement dans le fichier app.manifest de base doivent être émises dans le manifeste d’application ClickOnce. Le fichier app.manifest est un fichier manifeste partiel qui contient uniquement les définitions d’informations d’approbation. Il s’agit d’un fichier masqué qui est ajouté automatiquement à votre projet quand vous configurez les autorisations dans la page Sécurité.

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 soit Mises à jour de premier plan, soit Mises à jour en arrière-plan.

  • UpdateInterval spécifie la fréquence à laquelle l’application doit rechercher les mises à jour.

  • UpdateIntervalUnits spécifie si la valeur UpdateInterval est indiquée en heures, jours ou semaines.

  • 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.