Visual Studio WiX ProjectでWXIファイルを使用する
-
03-07-2019 - |
質問
インクルードファイル(.wxi)を使用して、WiXインストールファイルを個別の部分(変数、コンポーネントなど)に分割することを示す複数のソースに出くわしました。私には完全に理にかなっているので、<!> lt; components <!> gt;ノードを.wxsファイルから取り出して別のファイルに入れますが、Visual Studio 2008でプロジェクトをコンパイルしようとすると、<!> lt; ComponentRef <!> gt;ごとにエラーが発生します。それは<!> quot;セクション 'Product:{...}' <!> quot;のシンボル '...'への未解決の参照であると述べています。
<!> lt;?include <!> quot; Filename <!> quot;?<!> gt;を使用してみましたProduct.wxsファイルにタグを付けますが、スキーマの検証に違反しているようです。それを含める方法であれば、 どこ に行く必要がありますか?
所有しているファイルは次のとおりです。
Product.wxs
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product ...>
<Package .../>
<Media .../>
<Directory Id="TARGETDIR" Name="SourceDir">
</Directory>
<Feature Id="MainProgram" Level="1">
<ComponentRef Id="ProductComponent" />
<Feature Id="ContextMenu" Level="2">
<ComponentRef Id="ContextMenuComponent" />
</Feature>
</Feature>
</Product>
</Wix>
Components.wxi
<?xml version="1.0" encoding="utf-8"?>
<Include>
<Fragment>
<Component Id="ProductComponent" ...>
<File .../>
</Component>
<Component Id="ContextMenuComponent" ...>
<RegistryKey .../>
</Component>
</Fragment>
</Include>
Visual Studioでビルドするにはどうすればよいですか?ビルドのスクリプトは簡単に見えますが、まだ私の問題ではありません。
解決
インクルードファイルはヘッダーファイルと考える必要があります。実際には、複数の.wxs
ファイル間で共有する必要がある共通変数などを宣言するためにのみ使用します。
私のプロジェクトでは、〜10個の.wxsファイルと、製品コード、アップグレードコードなどを定義する単一の.wxiを使用しています。
SOの質問 Wixの秘theをご覧ください。 !> amp;ベストプラクティスおよび WiX Includes vs. Fragments 、およびドキュメント Wix.chm
内他のヒント
WXIではなくWXS拡張機能を使用してみてください。私は私のものを壊し、拡張機能としてWXSを使用しましたが、それはうまくいきました。プロジェクト内のすべてのWXSファイルは、wixprojによってwixコンパイラーに渡されます。
私の質問を探してこの質問を見つけ、私がやった場所から誰かが来た場合に備えて私の修正を追加すると思いました。
wixprojファイルを使用してVisual Studioからコンパイルする場合、このプロジェクトタイプはファイルリンクをサポートしていないようです(既存のアイテムを追加...リンクとして追加)。最終的にプロジェクト内のリンクになりますが、コンパイルすると、未解決のシンボルがあると文句を言うでしょう。