Assinado montagem dependência que faz referência a uma DLL COM deve ter a dependência é gerado interoperabilidade assembly referenciado
-
12-09-2019 - |
Pergunta
Desculpe sobre a terrível título.
Eu tenho um assinado assembly 'Signed.dll' que é uma dependência de uma outra montagem, dizem executable.exe.
referências Signed.dll uma DLL COM e publicamente expõe um dos tipos deste COM DLL: 'ComPublicT'
executable.exe deve fazer referência a Interop.COM.dll gerado automaticamente a partir do projecto Assinado, em vez de adicionar uma referência para a DLL COM original.
O erro é uma incompatibilidade de tipo entre dois tipos diferentes ComPublicT a partir dos dois conjuntos de interoperabilidade diferentes.
Isso só é necessário se Signed.dll é assinado.
Além de criar um tipo que imita ComPublicT, como posso permitir executável para fazer referência a DLL COM ao invés da interoperabilidade COM do Assinado montagem?
Por que isso acontece?
Editar, Aqui está uma análise um pouco diferente:
Assinado Projeto referente ao COM.dll, e publicamente expõe um tipo do COM.dll Adicionando esta referência em Visual Studio cria automaticamente Interop.COM.dll
referências executável e depende do projeto assinado Normalmente, você pode adicionar uma referência para COM.dll e está tudo bem.
Porque Assinado é assinado, o tipo Interop.COM.dll publicamente expostos a partir Assinado não é visto pelo compilador como o mesmo que o tipo publicamente expostos a partir Interop.COM.dll do executável
executável deve manualmente a referência de Assinado Interop.COM.dll, que se sente frágil.
Solução
-
Cada assembly referenciado por um assinado montagem também deve ser assinado.
-
Normalmente há uma assinado Interop Assembly primária (PIA) fornecido pelo autor da DLL COM. Ele deve ser o único interoperabilidade de montagem para seus tipos COM pais referenciados por qualquer .NET montagem. http://msdn.microsoft.com/en-us/library/aax7sdch. aspx Não há um PIA disponível no meu caso.
Os dois módulos de interoperabilidade gerados pelo Visual Studio para os meus dois projetos diferentes em que uma interoperabilidade assembly é assinado, eo outro é não assinado.
Assim, os tipos contido no os módulos de interoperabilidade diferem.
Uma solução é a de gerar uma única assinatura de interoperabilidade montagem que é referenciado por ambos os projectos.