J'ai un très grand kit d'installation à construire dans Visual Studio 2013 (inclut quelques outils liés au projet principal, un service Windows et une application web avec une structure de répertoire non trivial). J'apprends toujours à utiliser WiX et je continue d'élaborer, de tester et d'affiner le projet WiX. Actuellement, j'ai les tâches de récolte configurées en tant qu'événements de construction, en utilisant une commande de la forme
"C: \ Program Files (x86) \ Jeu d'outils WiX v3.9 \ bin \ heat.exe" dir "$) \ MyProjectDir \ bin \ $ (Nom_Configuration) "-cg MyComponentRef -ag -dr MYINSTALLDIR -srd -wixvar -var var.MySourceFiles -sreg -out" $ (SolutionDir) \ Déploiement \ Mon projet d'installation \ ComponentList.wxs "-t "$ (SolutionDir) \ Déploiement \ Mon programme d'installation \ FileFilter.xslt"
Cette commande récupère simplement tous les fichiers du dossier bin \ Debug (ou bin \ Release) du projet, puis les filtre à l'aide d'une transformation de feuille de style xml. Il y a quelques récoltes à rassembler comme ça, donc maintenir toutes les variables du fichier source (l'argument "var.MySourceFiles" dans la commande) devenait fastidieux et sujet aux erreurs. Initialement, j'avais ajouté les déclarations aux variables du préprocesseur du projet, mais je voulais quelque chose qui soit un peu plus «autonome». En utilisant les conseils utiles que j'ai trouvé à WiX tricks and tips, je déclarai un nouveau fichier à inclure, « PreprocessorVars.wxi » avec un contenu
et a obtenu le xslt pour l'inclure dans la sortie générée par la chaleur.exe avec l'extrait
<xsl:processing-instruction name="include">
$(sys.CURRENTDIR)\PreprocessorVars.wxi
</xsl:processing-instruction>
xslt produit maintenant sortie qui ressemble à ceci:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<?include
$(sys.CURRENTDIR)\PreprocessorVars.wxi
?>
<Fragment>
<DirectoryRef Id="MYINSTALLDIR" />
</Fragment>
<Fragment>
<ComponentGroup Id="MyComponentRef">
<Component Id="xyz" Directory="MYINSTALLDIR" Guid="*">
<File Id="abc" KeyPath="yes" Source="$(var.MySourceFiles)\MyProjectExecutable.exe" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
qui traite Wix sans aucune erreur.
J'ai trouvé que c'était la réponse: http://stackoverflow.com/a/4280454/11421 –