Как ReuseCabinetCache используется в установке WIX - PullRequest
1 голос
/ 01 февраля 2012

Аналогичный вопрос: Повторное использование компонентов WIX для ускорения свеча / свет

У моего проекта та же проблема, что и у упомянутого;очень большая статическая база данных, которая никогда не изменяется, сжимается в msi каждый раз, когда требуется сборка.Я хотел бы сделать так, как задан вопрос: повторно использовать предварительно сжатый файл CAB для ускорения времени сборки.

Я начал делать, как подсказывает ответ, используя свойство cabCache.Я добавил следующее в .wixproj:

<CabinetCachePath>cabs</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>

Затем я разделил статические данные на фрагмент:

<Fragmet>
  <Media Id="2" Cabinet="static.cab" EmbedCab="no" />
  <Component Id="staticCab" Guid="..." >
    Files ...
  </Component>

И этот фрагмент был указан в функции:

<ComponentRef Id="staticCab" />

Это создало файл cab, но оставил его пустым.Моей следующей мыслью было использование модуля слияния.Я создал модуль:

<Module Id="StaticModule" Language="1033" Version="1.0.0.0" >
  <Package ...>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="MergeRedirectFolder" Name=".">
        <Component Id="StaticFiles" Guid="...">
          Files...
        </ -- End all XML Tags

А затем слил его:

<Directory Id="StaticDir" Name="static">
  <Merge Id="StaticModule" Language="1033" src="..\Static\bin\Release\static.msm" />
</Directory>

<Feature ...>
  <MergeRef Id="StaticModule"/>
</Feature>

Даже после всего этого CabinetCache все еще перестраивается каждый раз.

Я думаю,мой вопрос был бы, как правильно использовать ReuseCabinetCache.Я все еще изучаю WIX, поэтому я прошу прощения, если ответ очевиден.Я просто не уверен, как его использовать.

Редактировать: Модуль MergeModule не будет идеальным, так как нет необходимости делиться этой логикой с другими MSI.Этот проект полезен только для одной команды разработчиков.

1 Ответ

3 голосов
/ 01 февраля 2012

Я собираюсь пойти дальше и ответить на свой вопрос, поскольку он оказался настолько простым.

Измените .wxiproj, чтобы эти свойства были в

<CabinetCachePath>cabs</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>

Добавитьmedia в .wxs install

<Media Id="2" Cabinet="static.cab" EmbedCab="yes" />

В теге Directory, где вы храните статические файлы, добавьте DiskId="2".

. Это сделает пару вещей.Сначала вы говорите Wix, что не хотите хранить шкафы на пути к повторному использованию шкафов.Создание нового кабинета и хранение в нем только статических данных (или данных, которые меняются не часто) приведет к тому, что Wix будет использовать кэшированную версию кабинета.Wix проверяет шкафы, проверяя, что:

  • Количество файлов в кэшированном кабинете соответствует количеству создаваемых файлов.
  • Все имена файлов идентичны.
  • Порядок файлов идентичен.
  • Метки времени для всех файлов идентичны.

(Источник: http://wix.sourceforge.net/manual-wix3/optimizing_builds.htm)

Не удивительно, что я не смогне найти никакой документации по нему. Это так легко сделать, это должно было быть для меня очевидно.

Обновление: Кроме того, несколько нитей используются для построения нескольких шкафов. Создание нескольких шкафов будетулучшите скорость еще больше.

...