2012-10-19 3 views
26

У меня есть простое решение для моего проекта, который хорошо работает. Но я не могу понять, как сделать исходные пути относительными. Может кто-нибудь мне помочь?WiX Относительный путь к исходному файлу

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

Как я могу сделать путь относительно решения Wix? WiX и все необходимые файлы находятся в одном решении.

ответ

57

Вы можете использовать относительный путь, как так:

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

ИЛИ

Вы можете добавить конфигурационный файл для вашего проекта, чтобы определить общие переменные. Для этого добавьте в проект новый файл «WiX Include», назовите его config.wxi. Затем в заголовочный файл, вы можете определить переменнуюSourceDir так:

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

Теперь в файле .wxs, вы можете добавить ссылку на файл конфигурации в верхней части, например:

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

Тогда просто ссылаться на ваш SourceDir переменной следующим образом:

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

Кроме того, есть некоторые встроенные в WiX project variables, который вы можете использовать.

+0

Это выглядит великолепно! Спасибо! Есть ли возможность использовать разные значения для var.Sourcedir - в зависимости от отладки или выпуска Установка? –

+0

См. Ссылку, которую я добавил. Существуют встроенные переменные проекта, которые должны помочь. – BryanJ

+0

В контексте моего [родственного вопроса] (http://stackoverflow.com/questions/21687392/how-can-i-maintain-file-reference-integrity-from-a-wix-setup-library), я попробовал это и обнаружил, что файл include не будет работать для моей ситуации. Любая форма переменных настройки не делает переменную доступной для проекта зависимости. Однако переменные проекта, с которыми вы связаны, выглядят так, как будто они могут работать для моих целей, потому что они стабильны независимо от контекста других проектов. Благодарим вас за включение этой ссылки. –

2

Существует много способов сделать это, но лично мне нравится делать проекты приложений для приложений в разных решениях. Сначала я создаю решение приложения и использую команды postbuild для публикации содержимого в папку развертывания.

В моих проектах-установщиках я устанавливаю $ (var.SourceDir) = ".. \ deploy", а затем $ (var.SourceDir) \ foo.exe для исходного пути.

Смежные вопросы