Работа с потерянными компонентами при компоновке wixlib

Мне поручено собрать 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'. Если это продукт, каждый компонент должен иметь хотя бы одну родительскую функцию. Чтобы включить Компонент в Модуль, вы должны включить его непосредственно как элемент Component элемента Module или косвенно через элементы ComponentRef, ComponentGroup или ComponentGroupRef.

Кто-нибудь придумал способ, как избирательно использовать компоненты, предоставляемые в wixlib? Я мог бы включить ExtraStuff как отдельная функция для пользователя, но цель здесь - уменьшить установщик. Я мог бы вежливо попросить ThirdParty предоставить два отдельных wixlib, но я бы хотел этого избежать.

2 ответа

Решение

После борьбы у меня есть обходной путь, неприятный обходной путь:

  1. Создайте фиктивный wixproject и включите wixlib, как вы это обычно делаете.
  2. Добавьте фиктивный проект как свою зависимость для окончательного проекта
  3. В событии пост-сборки фиктивного проекта запустите скрипт powershell, который будет:
    • Декомпилируйте dummy.msi с выводом двоичных файлов (ключ -x), используя dark.exe
    • Создание файла new.wxs на основе dummy.wxs с включением тегов, чтобы сделать компоненты условными
  4. Включить new.wxs в окончательный проект

Я не думаю, что у wix есть возможность использовать только часть пакета wixlib. Думайте о wixlibs как о модулях слияния (без видимых таблиц). Вы не можете использовать только половину модуля слияния, и вы не можете использовать только половину wixlib.

Боюсь, вам придется попросить третью сторону разбить их wixlib на два пакета.

Другие вопросы по тегам