Проблема с установкой сборок в GAC - PullRequest
2 голосов
/ 26 сентября 2011

Я пытаюсь развернуть пару сторонних сборок в GAC с WiX.Некоторые из этих сборок являются смешанными сборками.Обычный способ сделать это - установить атрибут сборки соответствующего файла в «net».Тем не менее, выполнение этого способа приводит к ошибке во время установки:

Error 1938. An error occurred during the installation of assembly ...One or more modules of the  assembly could not be found. HRESULT: 0x80131042. assembly interface: IAssemblyCacheItem, function : Commit, component: ...   MSI (s) (A8:B0) [12:32:39:085]:....    assembly .... One or more modules of the assembly could not be found. HRESULT: 0x80131042. assembly interface: IAssemblyCacheItem, function: Commit, component:...

Инструкции, которые я получил от поставщика для установки сборки в gac:

  1. Поместите всеdll (d1, d2, d3, ..., dn) в том же каталоге.
  2. Запустите gacutil для подмножества этих библиотек.

Если я возьму «сырой» взгляд в gac, содержимое одной из папок будет выглядеть так:

gac_32 \ d1 \ 0.0.0.0_271E3736135E91A2 \ d1.dll gac_32 \ d1 \ 0.0.0.0_271E3736135E91A2 \ d2.dll gac_32 \ d1 \ 0.0.0.0_271E3736135E91A2 \ d3.dll

из найденного gacutil.dll и d3.dll должны быть помещены в тот же каталог, что и d1.dll, и автоматически сделали это.

Как это сделать с помощью wix?Единственный способ, которым я сейчас вижу, - это вызвать gacutil как пользовательское действие, но это не похоже на хорошее решение.

Спасибо, Стефан

1 Ответ

4 голосов
/ 27 сентября 2011

В случае, если кто-то еще борется с этим:

Чтобы установить многофайловую сборку, состоящую из одной управляемой сборки и одной или нескольких собственных или смешанных библиотек, на которые ссылается управляемая сборка, создайте следующую структуру в WixSetup:

<Component Id="MyMultifileAssembly" Guid="abc">
        <File Id="ManagedAssembly" KeyPath="yes" Source="$(var.ThirdParty)\Managed.dll" Assembly=".net"/>
        <File Id="UnmanagedAssembly1" KeyPath="no" Source="$(var.ThirdParty)\Unmanaged1.dll" />
        <File Id="UnmanagedAssembly2" KeyPath="no" Source="$(var.ThirdParty)\Unmanaged2.dll" />
</Component>

Обе неуправляемые сборки перейдут в папку GAC, в которую установлена ​​управляемая dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...