J'ai écrit une application et son installeur WiX et je l'ai mise sous contrôle de version en utilisant subversion. Lorsque le programme d'installation de WiX se construit, je veux que son numéro de version soit la version actuelle de l'application. Comment faire cela? J'ai utilisé c # pour coder l'application.
NB J'utilise ccnet pour construire ce projet
J'ai fait cela dans l'un de mes projets en écrivant une extension de préprocesseur pour lire la version du fichier à partir de mon exécutable. Le fichier WiX ressemble donc à quelque chose comme:
J'ai posté le code pour dans sur CodePlex: http://wixfileversionext.codeplex.com/
la source
<?define ProductName="!(bind.property.ProductName)" ?><?define CompanyName="!(bind.property.Manufacturer)" ?><?define ProductVersion=!(bind.FileVersion.FileId) ?>
OùFileId
est la valeur de l'Id
attribut de l'un de vosFile
éléments dans un fichierComponent
.Dans le cas où quelqu'un recherche un exemple XML réel, cela fonctionne avec les assemblys .NET (et vous n'avez pas à faire les attributs Assembly ou KeyPath). J'ai éliminé le code sans rapport avec [...] des espaces réservés:
la source
!(bind.fileVersion.MyDLL)
il utilise la 3ème partie en référence à la<File Id="MyDLL"...
sectionVoici un moyen très simple d'obtenir la version de votre bundle Bootstrapper pour qu'elle corresponde à votre version d'assembly MyApp en utilisant un
BeforeBuild Target
etDefineConstants
.Bundle.wxs:
Bootstrapper.wixproj:
la source
var.ProductName
etvar.BuildVersion
quelque part au-dessus de votre<Bundle>
?BeforeBuild
cible, il peut donc être nécessaire de spécifier explicitementAfterTargets="AfterResolveReferences"
si vous construisez dans l'EDIVous pouvez transmettre la version au script MSBuild pour votre projet d'installation de la même manière que vous pouvez transmettre le script de génération de l'application.
Par exemple, si votre système CI définit des variables
AppVersion
etBuildNumber
, et les transmet à vos scripts MSBuild, votre wixproj peut créer uneVersion
propriété correspondante qu'il transmet à Wix comme ceci:La première définition de
Version
fournit une valeur par défaut lorsque vous créez localement. Tout ce qu'il finit par devient uneVersion
variable dans Wix. Utilisez-le dans un fichier wsx comme celui-ci:J'aime inclure la version dans la description afin qu'il soit facile de rechercher dans l'Explorateur de fenêtres (sous forme de colonne dans la vue détaillée ou sur la page Propriétés) indépendamment du nom du fichier.
Passer la version en tant que variable vous donne plus de contrôle que de la lire à partir d'un fichier. Lorsque vous lisez un fichier, vous obtenez les 4 parties de la version programmatique. Cependant, ProductVersion est uniquement conçu pour utiliser les 3 premières parties.
la source
<Version Condition=" '$(BuildVersionOfAsm)' != '' ">$(BuildVersionOfAsm)</Version>
alors que BuildVersionOfAsm est une variable dans les pipelines devops.Cela semble assez proche de ce que vous essayez d'accomplir. Voyez ce qu'est l'équivalent en régulateur de vitesse.
http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/
la source