Зависимость подписанной сборки, которая ссылается на COM DLL, должна иметь ссылку на сгенерированную сборку взаимодействия. - PullRequest
1 голос
/ 04 декабря 2009

Извините за ужасный заголовок.

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

Signed.dll ссылается на COM DLL и публично предоставляет один из типов этой COM DLL: 'ComPublicT.'

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

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

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

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

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

Edit, Вот несколько другая разбивка:

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

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

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

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

1 Ответ

0 голосов
/ 04 декабря 2009
  1. Каждая сборка, на которую ссылается подписанная сборка, также должна быть подписана.

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

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

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

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

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