Подписанная зависимость сборки, которая ссылается на COM DLL, должна содержать ссылку на сгенерированную сборку взаимодействия зависимости

StackOverflow https://stackoverflow.com/questions/1843529

Вопрос

Извините за ужасное название.

У меня есть подписанная сборка 'Signed.dll', которая является зависимостью от другой сборки, скажем Executable.exe.

Подписано.dll ссылается на COM DLL и публично предоставляет один из типов этой COM DLL:"КомПубликТ".

Executable.exe должен ссылаться на автоматически сгенерированный Interop.COM.dll из подписанного проекта, вместо добавления ссылки на исходную COM DLL.

Ошибка заключается в несоответствии типов между двумя разными типами ComPublicT из двух разных сборок COM-взаимодействия.

Это требуется только в том случае, если подписано.dll подписана.

Помимо создания типа, имитирующего ComPublicT, как я могу разрешить исполняемому файлу ссылаться на COM DLL, а не на подписанную сборку COM-взаимодействия?

Почему это происходит?

Редактировать, вот несколько иная разбивка:

Подписанные ссылки на проект COM.dll и публично предоставляет тип из COM.dll Добавление этой ссылки в Visual Studio автоматически создает Interop.COM.dll

Исполняемый файл ссылается и зависит от подписанного проекта Обычно вы можете добавить ссылку на COM.dll и все в порядке.

Поскольку Signed является подписанным, общедоступный Interop.COM.dll тип из Signed не рассматривается компилятором как такой же, как общедоступный тип из исполняемого файла Interop.COM.dll

Исполняемый файл должен вручную ссылаться на Signed Interop.COM.dll, который кажется хрупким.

Это было полезно?

Решение

  1. Каждая сборка, на которую ссылается подписанная сборка, также должна быть подписана.

  2. Обычно существует подписанная Первичная сборка взаимодействия (PIA), предоставляемая автором COM DLL.Это должна быть единственная сборка взаимодействия для своих родительских COM-типов, на которые ссылается any .СЕТЕВАЯ сборка.http://msdn.microsoft.com/en-us/library/aax7sdch.aspx В моем случае PIA недоступна.

Две сборки взаимодействия, созданные Visual Studio для моих двух проектов, отличаются тем, что одна сборка взаимодействия подписана, а другая без знака.

Таким образом, типы, содержащиеся в сборках взаимодействия, различаются.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top