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 :
OutputNamepermet de définir le nom du msi.OutputPathpermet 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
OutputNameest défini dans le fichier wixproj, l’argument passé à msbuild, n’est pas pris en compte. - Si
OutputPathva 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 tachesHarvestde WIX.
Pour résoudre ces deux problèmes, j’ai pris l’habitude de :
- Ajouter une condition sur
OutputNameafin 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
OutputPathconditionné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.