Pergunta

Com a migração para .net 4 começamos a enfrentar o problema com a nossa biblioteca.Suponha que temos a nossa biblioteca MyLib.dll e ele faz referência a assemblagem de interoperabilidade Interop.dll.Interop.dll tem referência para MissingInterop.dll.

Assim, as referências podem ser exibidos como: MyLib.dll -> Interop.dll -> MissingInterop.dll

No MyLib.dll nós usamos apenas parte de classes de Interop.dll então, nós nunca chamar qualquer coisa que precise de MissingInterop.dll e em .net 3.5 ele funciona muito bem é por isso Que nós não enviamos MissingInterop.dll com MyLib.dll.

Quando usamos MyLib.dll do processo de execução .net 4 aplicativo falha com a seguinte exceção:

FileNotFoundException:"Não foi possível carregar arquivo ou assembly 'MissingInterop.dll, Versão=1.0.0.0, Culture=neutral, PublicKeyToken=nulo' ou uma de suas dependências.O sistema não é possível localizar o arquivo especificado."`

Também tenho notado que Interop.dll referências falta da dll mas .net não tente carregá-los.E eu tenho encontrado a diferença.Alguns tipos de MissingInterop.dll são utilizados no método de parâmetros em Interop.dll enquanto os tipos de falta bibliotecas são usadas somente como método tipos de retorno, i.é.no Interop.dll eu posso ver:

  Class C1
     MethodA : void (valuetype [MissingInterop]MissingAssembly.TypeA&)
  Class C2
     get_Status : valuetype[AnotherMissingInterop]AnotherMissingAssembly.TypeB()

e .NET 4 tenta carregar MissingInterop.dll mas não tente carregar AnotherMissingInterop.dll.

.NET 3.5 não tentar carregar nem MissingInterop.dll nem AnotherMissingInterop porque eles não são usados no caminho de execução.

Eu sei o que .NET 4 tem novo Fusion, mas eu não encontrei o tal quebrar a alteração descrita em qualquer lugar.Alguém sabe o porquê .NET 4 tenta carregar algo que não é necessário?Existe uma maneira de corrigir isso sem recompilar o código ou adicionar o ficheiro em falta?

Foi útil?

Solução

Quando você migrar sua aplicação .NET 3.0, 3.5, 4.0, em seguida, você precisa incluir este mylib.dll em seu projeto externamente e compilá-los, ou, se possível, você tem o código-fonte da assembléia, em seguida, transformá-lo .net 4.0

Outras dicas

Provavelmente não (da experiência).Houve problemas semelhantes em torno de uma etapa anterior (não consigo lembrar se era 2.0 -> 2.1 ou 3.0 -> 3.1.mas isso foi há um tempo atrás) Nós tínhamos máquinas de comunicar que a versão anterior foi instalado, e a queda.Quando limpar as instalações de rede e, na verdade, instalada a versão mais baixa e, em seguida, a atualização, tudo funcionou bem.A Microsoft pode esgueirar-se de um patch.Eu estaria inclinado para realmente levantar com MS.Você tem um aparentemente bem reasearched bug, e em tais circumsatances contrato de suporte ou não, eles são muito relutantes para acabar com a cobrança.(A minha experiência de qualquer maneira)

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