Wix - Многоразовые компоненты между несколькими функциями - PullRequest
3 голосов
/ 28 февраля 2012

Рассмотрим следующий сценарий:

  • Проект CommonLib
    • CommonLib.dll
  • Проект AExe
    • CommonLib.dll
    • AExe.exe
  • Project BExe
    • CommonLib.dll
    • BExe.exe

Проект AExe установлен в %ProgramFiles%\AExe\bin и BExe %ProgramFiles%\BExe\bin, но оба развернуты с использованием одного и того же .MSI

Как я могу объявить CommonLib.dll как универсальный компонент, а затем повторно использоватьэто в AExe Directory[Ref] и BExe Directory[Ref]?

Что я хотел бы сделать:

<Fragment>
<Component Id="C.CommonLib.dll" Guid="*">
  <File Id="Fi.CommonLib.dll" Source="<path>CommonLib.dll" KeyPath="yes"/>
</Component>
<Directory Id="ProgramFilesFolder">
  <Directory Id="Di.AExe" Name="AExe">
    <Directory Id="Di.AExeBin" Name="bin">
      <ComponentRef Id="C.CommonLib.dll"/>
    </Directory>
  </Directory>
  <Directory Id="Di.BExe" Name="BExe">
    <Directory Id="Di.BExeBin" Name="bin">
      <ComponentRef Id="C.CommonLib.dll"/>
    </Directory>
  </Directory>
</Directory>
</Fragment>

Но это не работает, потому что Directory не позволяет Ref как ребенок.Как бы вы это написали?

PS: я привожу пример с двумя проектами, но на самом деле гораздо больше проектов, которые используют более одной общей библиотеки, поэтому я и спрашиваю:)

1 Ответ

2 голосов
/ 29 февраля 2012

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

<Component Id="CommonLib.dll.1" Directory="Di.AExeBin">
  <File Id="CommonLib.dll.1" Source="...\CommonLib.dll"/>
</Component>

<Component Id="CommonLib.dll.2" Directory="Di.BExeBin">
  <File Id="CommonLib.dll.2" Source="...\CommonLib.dll"/>
</Component>

(Примечание: мой пример для wix3, где вы можете использовать атрибут Directory = "...", ноКонечно, вы также можете поместить компоненты в родительские элементы Справочника.)

...