2012-10-19 10 views
26

J'ai une solution simple pour mon projet, qui fonctionne bien. Mais je suis incapable de comprendre comment rendre les chemins Source relatifs. Quelqu'un peut-il m'aider?Chemin d'accès relatif WiX au fichier source

<Component Id="Bla.exe" Guid="*"> 
    <File Id="Bla.exe" Source="D:\Projects\Bla\Bla\bin\Debug\Bla.exe" KeyPath="yes" Checksum="yes"/> 
    </Component> 

Comment faire le chemin relatif à la solution Wix? WiX et tous les fichiers nécessaires sont dans la même solution.

Répondre

57

Vous pouvez utiliser le chemin relatif comme ceci:

<File Id="Bla.exe" Source="..\bin\Debug\Bla.exe" KeyPath="yes" Checksum="yes"/> 

OU

Vous pouvez ajouter un fichier de configuration à votre projet pour définir des variables communes. Pour ce faire, ajoutez un nouveau fichier "WiX Include" à votre projet, appelez le config.wxi. Ensuite, dans votre fichier include, vous pouvez définir une variable SourceDir comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<Include> 
    <?define SourceDir = "D:\Projects\Bla\Bla\bin\Debug" ?> 
</Include> 

maintenant dans votre fichier .wxs, vous pouvez ajouter une référence au fichier de configuration en haut, ex:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<?include "config.wxi"?> 

Ensuite, il suffit référencer vos SourceDir variables comme ceci:

<File Id="Bla.exe" Source="$(var.SourceDir)\Bla.exe" KeyPath="yes" Checksum="yes"/> 

de plus, il y en a construit en WiX project variables que vous pouvez utiliser.

+0

Ça a l'air génial! Je vous remercie! Y a-t-il une possibilité d'utiliser des valeurs différentes pour var.Sourcedir - en fonction de l'installation du débogage ou de la libération? –

+0

Voir le lien que j'ai ajouté. Il y a des variables de projet intégrées qui devraient aider. – BryanJ

+0

Dans le contexte de ma [question connexe] (http://stackoverflow.com/questions/21687392/how-can-i-maintain-file-reference-integrity-from-a-wix-setup-library), j'ai essayé ceci et trouvé que le fichier d'inclusion ne fonctionnera pas pour ma situation. Toute forme de définition de variables ne rend pas la variable disponible pour le projet de dépendance. Cependant, les variables de projet auxquelles vous avez lié semblaient fonctionner à mes fins, car elles sont stables indépendamment des contextes des autres projets. Merci d'inclure ce lien. –

2

Il y a plusieurs façons de le faire mais personnellement, ce que j'aime faire, c'est mettre mes projets d'installateur d'application dans différentes solutions. Je construis d'abord la solution de l'application et utilise les commandes post-construction pour publier le contenu dans un dossier de déploiement.

Dans mes projets d'installation, je définis $ (var.SourceDir) = ".. \ deploy" puis $ (var.SourceDir) \ foo.exe pour un chemin source.