Choisir le nom du fichier msi produit par WIX Toolset, et son dossier de destination
Date of publication
1/28/2023
No comments
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 tachesHarvest
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 deOutputPathMsi
, 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.