2012-10-19 25 views
26

Ich habe eine einfache Lösung für mein Projekt, die gut funktioniert. Aber ich kann nicht verstehen, wie man die Source-Pfade relativiert. Kann mir jemand helfen?WiX Relativer Pfad zur Quelldatei

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

Wie kann ich den Pfad relativ zur Wix Solution machen? WiX und alle notwendigen Dateien befinden sich in der gleichen Lösung.

Antwort

57

können Sie den relativen Pfad wie so verwenden:

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

ODER

Sie können eine Konfigurationsdatei zu Ihrem Projekt hinzufügen gemeinsamen Variablen zu definieren. Um dies zu tun, fügen Sie Ihrem Projekt eine neue "WiX Include" -Datei hinzu, rufen Sie sie config.wxi. Dann in der Datei enthält, können Sie definieren ein SourceDir Variable wie so:

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

Jetzt in Ihrer .wxs Datei, Sie einen Verweis auf die Konfigurationsdatei an der Spitze hinzufügen können, ex:

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

Dann verweisen Sie einfach Ihre SourceDir Variable wie so:

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

auch gibt einige ingebaut sind, die Sie verwenden können.

+0

Das sieht gut aus! Vielen Dank! Gibt es eine Möglichkeit, verschiedene Werte für var.Sourcedir zu verwenden - abhängig von Debug oder Release Installation? –

+0

Siehe den Link, den ich hinzugefügt habe. Es gibt eingebaute Projektvariablen, die helfen sollten. – BryanJ

+0

Im Zusammenhang mit meiner [verwandten Frage] (http://stackoverflow.com/questions/21687392/how-can-i-maintain-file-reference-integrity-from-a-wix-setup-library), versuchte ich Dies und festgestellt, dass die Include-Datei für meine Situation nicht funktioniert. Jede Form der Variableneinstellung macht die Variable nicht für das Abhängigkeitsprojekt verfügbar. Die Projektvariablen, die Sie verlinkt haben, sehen jedoch so aus, als könnten sie für meine Zwecke funktionieren, da sie unabhängig von den Kontexten anderer Projekte stabil sind. Danke, dass Sie diesen Link hinzugefügt haben. –

2

Es gibt viele Möglichkeiten, dies zu tun, aber persönlich, was ich gerne mache, ist meine Anwendung Installer-Projekte in verschiedenen Lösungen. Ich erstelle zuerst die Anwendungslösung und verwende Postbuild-Befehle, um den Inhalt in einem Bereitstellungsordner zu veröffentlichen.

In meinen Installer-Projekten setze ich $ (var.SourceDir) = ".. \ deploy" und dann $ (var.SourceDir) \ foo.exe für einen Quellpfad.