Зависимость подписанной сборки, которая ссылается на COM DLL, должна иметь ссылку на сгенерированную сборку взаимодействия.
Извините за ужасный заголовок.
У меня есть подписанная сборка '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 ответ
Каждая сборка, на которую ссылается подписанная сборка, также должна быть подписана.
Обычно существует подписанная основная сборка взаимодействия (PIA), предоставленная автором COM DLL. Это должна быть единственная сборка взаимодействия для его родительских типов COM, на которые ссылается любая сборка.NET. http://msdn.microsoft.com/en-us/library/aax7sdch.aspx В моем случае недоступна PIA.
Две сборки взаимодействия, сгенерированные Visual Studio для моих двух проектов, отличаются тем, что одна сборка взаимодействия подписана, а другая - без подписи.
Таким образом, типы, содержащиеся в сборках взаимодействия, различаются.
Одним из решений является создание одной подписанной сборки взаимодействия, на которую ссылаются оба проекта.