juin
2013
Problématique : La solution Visual Studio contient une application WPF déployée par ClickOnce, et l’objectif est de créer un package ClickOnce lors de l’exécution du nightly build sous TFS 2010 (industrialisation oblige).
Solution #1 : Utiliser l’activity présente dans la librairie tfsbuildextensions.
Inconvénients :
- L’utilisation de l’activity est peu documentée… Il convient donc d’ouvrir avec iLSpy l’assembly pour pouvoir la paramétrer.
Cela pourra faire l’objet d’un autre billet. - L’implémentation de l’activity impose à la build de ne contenir (au plus) qu’une seule application !
En effet, la création du package ClickOnce est réalisée à la main.
Les grandes lignes du processus sont les suivantes :
1. Copie du contenu du répertoire binaries de la build dans le répertoire du package
2. Renommage des fichiers en .deploy
3. Manipulation de Mage.exe pour créer le manifest de déploiement et le signer.Etant donné que sous un build TFS, le répertoire des binaries est commun à tous les projets de la build, si votre solution contient plus d’une application, le package ClickOnce généré contiendra également les binaires des autres applications…
Dans ce cas, il ne vous plus reste qu’à passez votre chemin et à évaluer la solution #2 !
Solution #2 : Modification du template pour ajouter la génération du package ClickOnce par l’appel MSBuild.
Étapes :
- Configuration ClickOnce dans le projet concerné
Cela consiste à ouvrir les propriétés du projet, et a paramétrer la publication ClickOnce.
Ensuite, à exécuter le wizard de déploiement afin de tester le paramétrage, et le corriger le cas échéant.
Attention a ne pas oublier d’archiver les modifications sur TFS ! - Trouver les bons paramètres en ligne de commande msbuild
L’idée est la suivante : il est possible de générer un package ClickOnce à partir d’un appel MSBuild à condition de disposer des bons paramètres.
La ligne de commande est la suivante (dans mon cas) :msbuild chemin-vers-fichier-projet.csproj
/t:build;publish
/p:ApplicationVersion=1.2.3.4
/p:BootstrapperEnabled=true
/p:IsWebBootstrapper=true
/p:Configuration=Release
/p:ManifestKeyFile=chemin-vers-fichier-signature.pfx
/p:OutputPath=chemin-vers-repertoire-sortie
/p:InstallUrl=http://url-installation-clickonce/t:build;publish MSBuild doit exécuter Build et Publish /p:ApplicationVersion Propriété indiquant le numéro de version ClickOnce du déploiement
Le format : Majeur.Mineur.Build.RevisionBootstrapperEnabled Valeur indiquant si le bootstrapper (setup.exe) doit être généré. IsWebBootstrapper Valeur indiquant que le déploiement ClickOnce doit pouvoir être effectué par le Web (manifeste de déploiement xxx.application) Configuration Valeur indiquant la configuration de build (Debug, Release). ManifestKeyFile Chemin vers le fichier pfx qui signe le manifeste ClickOnce OutputPath Chemin vers le répertoire de destination du package (pour la génération) InstallUrl URL cible de l’installation ClickOnce
Ex. : http://server/monapplicationClickOnceAttention : Si le fichier de signature a besoin d’un mot de passe, il est indispensable d’installer le certificat de l’autorité racine dans le magasin correspondant du poste de travail, et d’installer le certificat de signature dans le magasin my de l’utilisateur courant.
- Modification du template de build
Elle consiste à ajouter une activité de type « MSBuild » après la commande MSBuild native au workflow en renseignant les paramètres obtenus à l’étape ci dessus.
Il peut être nécessaire de préciser une condition d’exécution (« If ») si plusieurs fichiers solution sont indiqués dans la build afin d’éviter que l’action de packaging soit exécutée plusieurs fois.
Exemple d’utilisation dans un workflow :
La paramétrage de l’activité msbuild de packaging ressemble à ceci :
J’attire votre attention sur les deux points suivants :
– Les paramètres /p: … sont injectés dans la case « CommandLineArguments »
– Le contenu de « CommandLineArguments » formatte la chaine à l’aide de string.Format (d’où la syntaxe {x})
– Les paramètres /t: … sont injectés dans la case « Targets »Je vous laisse consulter la MSDN pour la documentation relative aux paramètre d’une activité de build
Enjoy