Wix Toolset 3.8 Visual Studio アドインを使用しています。さまざまなサービス展開プロジェクトで使用されるいくつかの共通コンポーネントをカプセル化する WIX セットアップ ライブラリを作成しました。このライブラリには、各展開にパッケージ化する必要があるいくつかのソリューション ファイルへの参照が含まれています。
これらの依存関係は、私の wix ライブラリ フラグメントでいくつかの異なる方法で使用されています。例えば:
<Binary Id="InstallationScript" SourceFile=".\Dependency1.vbs" />
<CustomAction Id="DependencyAction"
BinaryKey="InstallationScript"
VBScriptCall=""
Execute="deferred"
Return="check"
HideTarget="no"/>
<Component Id="DLL_Component" Guid="4745D9E2-0EBA-EE57-D8DB-677ADA9E9EC8">
<File Id="DLL1" Name="Dependency1.DLL" Source=".\Dependency1.dll" Vital="yes" KeyPath="yes" DiskId="1"/>
</Component>
WIX セットアップ ライブラリは、ファイルをリンクとしてプロジェクトに追加するか、プロジェクト ディレクトリにコピーするかに関係なく、プロジェクト ディレクトリでファイルを参照するか、元の場所への相対パスを使用するかに関係なく、正常にビルドされます。問題は、サービス展開用の WIX セットアップ プロジェクトにフラグメントを含めるときに発生します。
<Custom Action="DependencyAction" Before="InstallFinalize">
NOT INSTALLED AND NOT UPGRADINGPRODUCTCODE
</Custom>
セットアップ プロジェクトは、フォルダー構造内で同じ相対的な深さにないため、相対パスは、WIX ライブラリから参照される場合と同じ場所を指しません。アクションまたは機能を WIX ライブラリから参照すると、The system cannot fine the file '.\Dependency1.dll'
「The XML is being read immediately as it is and referenced from the Setup Project location not from the Library Project location, so the relative directory is wrong.」のようなエラーが表示されます。WIX ライブラリ内の相対パスを、それを使用するセットアップ プロジェクトの相対パスに設定するか、ソリューション ファイルをセットアップ プロジェクト ディレクトリにコピーすることもできますが、もちろん、それでは、共通の WIX ライブラリ。このライブラリを使用する必要がある他のサービス展開プロジェクトがあります。
問題は、セットアップ プロジェクトが存在するディレクトリに関係なく、それを使用するセットアップ プロジェクトで使用できる方法で、WIX ライブラリ内のソリューション ファイルを参照するにはどうすればよいかということです。