WIX : Fixer une variable, en fonction d'une règle métier
Date of publication
2/15/2023
No comments
Parfois, on peut être amené à fixer une variable de WIX ToolSet en fonction des propriétés d'un fichier, ou toute autre règle métier.
Pour mon exemple, je vais fixer le numéro de version de mon msi à partir d'une information "dérivée" du numéro de version d'un exécutable. Au lieu de prendre l'habituel Major.Minor.Buil.Revision
, je vais prendre Major.Minor.Revision.0
(oui, il y a des entreprises qui ont ce genre de demande un peu folle).
Pour cela, il faut modifier le fichier wixproj
, et y ajouter une tâche BeforeBuild.
Dans celle-ci, il y aura:
- Une tâche
GetAssemblyIdentity
chargée de récupérer les informations de l'exécutable. - La sortie de
GetAssemblyIdentity
initialisera une variable$AppIdentity
. - Une variable
$AppVersion
sera construite à partir des différents composants de$AppIdentity
. - Une tâche
DefineConstants
se chargera de définir une variable WIXvar.AppVersion
à partir de$AppIdentity
.
Ce qui donne :
<Target Name="BeforeBuild">
<GetAssemblyIdentity AssemblyFiles="..\MonApp\bin\$(Configuration)\MonApp.exe">
<Output TaskParameter="Assemblies" ItemName="AppIdentity" />
</GetAssemblyIdentity>
<PropertyGroup>
<AppVersion>$([System.String]::Join('.', $([System.Version]::Parse(%(AppIdentity.Version)).Major), $([System.Version]::Parse(%(AppIdentity.Version)).Minor), $([System.Version]::Parse(%(AppIdentity.Version)).Revision), 0 ))</AppVersion>
<DefineConstants>...;AppVersion=$(AppVersion)</DefineConstants>
</PropertyGroup>
</Target>
L'utilisation est ensuite un jeu d'enfant :
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product
Id="*"
Name="MonApp"
Language="1034"
Version="$(var.AppVersion)"
Manufacturer="..."
UpgradeCode="...">