Choisir le nom du fichier msi produit par WIX Toolset, et son dossier de destination

Par défaut, le fichier .wixproj contient le nécessaire pour définir le nom du msi à produire et son dossier de destination :

  • OutputName permet de définir le nom du msi.
  • OutputPath permet de définir le dossier de destination du msi.

Ceci convient à la plupart des personnes. Mais cela pose vite problème lors de l’automatisation de builds :

  • Pour changer le nom du fichier en fonction de la version de l’application.
  • Pour déposer automatiquement le msi dans un dossier de staging pour l’upload d’artefact dans Azure DevOps.

Les problèmes sont les suivants :

  • Si OutputName est défini dans le fichier wixproj, l’argument passé à msbuild, n’est pas pris en compte.
  • Si OutputPath va prendre la valeur de l’argument output passé à msbuild. Le msi se trouve alors perdu parmi les fichiers produits par les autres projets. Ceci n’est pas terrible, et pose d’autres problèmes dans le cas où vous souhaitez utiliser les taches Harvest de WIX.

Pour résoudre ces deux problèmes, j’ai pris l’habitude de :

  • Ajouter une condition sur OutputName afin de ne fixer sa valeur que si celle-ci n’est pas déjà définie. Ce qui se produit quand on passe l’argument /p:OutputName à msbuild.
  • Avoir deux nœuds OutputPath conditionnés par la présence de OutputPathMsi, et fixer leur valeur en fonction de celle-ci. Il suffit alors de passer l’argument /p:OutputPathMsi à msbuild pour définir le dossier de destination du msi à produire.

Ce qui donne par exemple :


<PropertyGroup>
  <OutputName Condition=" '$(OutputName)'=='' ">MonNomParDefaut</OutputName>
  <OutputPath Condition=" '$(OutputPathMsi)'=='' ">bin\$(Configuration)\</OutputPath>
  <OutputPath Condition=" '$(OutputPathMsi)'!='' ">$(OutputPathMsi)\</OutputPath>
</PropertyGroup>

Une fois ajouté à votre fichier wixproj, vous pouvez utiliser les arguments /p:OutputName="..." et /p:OutputPathMsi="..." avec msbuild.

Jérémy Jeanson

Comments

You have to be logged in to comment this post.