2012-10-19 57 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"/> 

OR

あなたは、あなたのプロジェクトにコンフィギュレーションファイルを追加することができ、共通の変数を定義します。これを行うには、プロジェクトに新しい "WiXインクルード"ファイルを追加し、 config.wxiと呼んでください。次に、ファイルを含めるあなたに、あなたがそうのよう SOURCEDIR変数を定義することができます:

は、あなたの.wxsファイルで今すぐ
<?xml version="1.0" encoding="utf-8"?> 
<Include> 
    <?define SourceDir = "D:\Projects\Bla\Bla\bin\Debug" ?> 
</Include> 

、あなたが一番上にある設定ファイルへの参照を追加することができ、例:

<?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"/> 

はまた、0123に建てられたいくつかがありますを使用してください。

+0

これはすばらしく見えます。ありがとうございました! var.Sourcedirに異なる値を使用する可能性はありますか?デバッグまたはリリースのインストールによって異なりますか? –

+0

私が追加したリンクを参照してください。プロジェクト変数には役立つものが組み込まれています。 – BryanJ

+0

私の[関連する質問](http://stackoverflow.com/questions/21687392/how-can-i-maintain-file-reference-integrity-from-a-wix-setup-library)の文脈で、私は試しましたこれは私の状況のた​​めにインクルードファイルが動作しないことがわかりました。どんな形式の設定変数でも、依存関係プロジェクトで変数を使用できるようにはなりません。しかし、あなたがリンクしたプロジェクト変数は、他のプロジェクトのコンテキストとは独立して安定しているので、私の目的のために働くように見えます。そのリンクを含めていただきありがとうございます。 –

2

これを行うには多くの方法がありますが、個人的には私のアプリケーションインストーラプロジェクトを別のソリューションに入れたいと思っています。最初にアプリケーションソリューションを構築し、postbuildコマンドを使用してコンテンツをdeployフォルダに公開します。

私のインストーラプロジェクトでは、ソースパスに$(var.SourceDir)= ".. \ deploy"と$(var.SourceDir)\ foo.exeを設定しました。