私は、サードパーティが提供する同じ wixlib に基づいて 2 つのインストーラーを構築する任務を負っています。フル インストーラーにはすべてのコンポーネントが含まれ、Lite にはコア部分のみが含まれます。wixlib には次の構造があると仮定します。
<Fragment>
<ComponentGroup Id="CoreStuff">
<!-- List of components for this bit, roughly 5MB -->
</ComponentGroup>
</Fragment>
<Fragment>
<ComponentGroup Id="ExtraStuff">
<!-- List of components for this bit, roughly 45MB -->
<ComponentRef Id="BigFile1"/>
</ComponentGroup>
<Component Id="BigFile1">
<File Id="BigFile1_bin" Name="BigFile1.bin"/>
</Component>
</Fragment>
インストーラーは msbuild でビルドされます。コンポーネントは、次の方法でプロジェクトに組み込まれます。
<Feature Id="ThirdPartyStuff">
<ComponentGroupRef Id="CoreStuff"/>
<?if $(var.Configuration) = "Full"?>
<ComponentGroupRef Id="ExtraStuff"/>
<?endif?>
</Feature>
最後に、予想どおり、LGHT0267 エラーが発生します。
エラー LGHT0267: 孤立したコンポーネント 'BigFile1' が見つかりました。これが製品の場合、すべてのコンポーネントに少なくとも 1 つの親機能が必要です。Component を Module に含めるには、それを Module 要素の Component 要素として直接含めるか、ComponentRef、ComponentGroup、または ComponentGroupRef 要素を介して間接的に含める必要があります。
wixlib で提供されているコンポーネントを選択的に使用する方法について、回避策を思いついた人はいますか? ユーザー向けの別の機能として含めることもできますExtraStuff
が、ここでの目標はインストーラーを縮小することです。ThirdParty に 2 つの別々の wixlib を提供するよう丁寧に依頼することもできますが、それは避けたいと思います。