Мне поручено создать 2 установщика на основе одной и той же библиотеки wixlib, предоставленной третьей стороной. Полный установщик включает в себя все компоненты, 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». Если это продукт, каждый компонент должен иметь хотя бы одну родительскую функцию. Чтобы включить компонент в модуль, вы должны включить его непосредственно как элемент компонента элемента модуля или косвенно через элементы ComponentRef, ComponentGroup или ComponentGroupRef.
Кто-нибудь придумал обходной путь, как выборочно использовать компоненты, представленные в wixlib? Я мог бы включить ExtraStuff
как отдельную функцию для пользователя, но здесь цель состоит в том, чтобы уменьшить размер установщика. Я мог бы вежливо попросить ThirdParty предоставить два отдельных wixlib, но я бы хотел этого избежать.