Assinado montagem dependência que faz referência a uma DLL COM deve ter a dependência é gerado interoperabilidade assembly referenciado

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

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.

Foi útil?

Solução

  1. Cada assembly referenciado por um assinado montagem também deve ser assinado.

  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top