Encontrei esse erro em um contexto em que estava usando o Autofac e muito carregamento dinâmico de assembly.
Ao executar uma operação de resolução de Autofac, o tempo de execução falha ao carregar um dos assemblies. A mensagem de erro reclamou isso Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
. Os sintomas ocorreram durante a execução em uma VM do Windows Server 2012 R2, mas não ocorreram nas VMs do Windows 10 ou Windows Server 2016.
ImplementationAssembly
referenciado System.Collections.Immutable
1.1.37, e continha implementações de uma IMyInterface<T1,T2>
interface, que foi definida em um separado DefinitionAssembly
. DefinitionAssembly
referenciado System.Collections.Immutable
1.1.36.
Os métodos dos IMyInterface<T1,T2>
quais "não foram implementados" tinham parâmetros do tipo IImmutableDictionary<TKey, TRow>
, definidos emSystem.Collections.Immutable
.
A cópia real System.Collections.Immutable
encontrada no diretório do programa era a versão 1.1.37. Na minha VM do Windows Server 2012 R2, o GAC continha uma cópia da System.Collections.Immutable
1.1.36. No Windows 10 e Windows Server 2016, o GAC continha uma cópia doSystem.Collections.Immutable
1.1.37. O erro de carregamento ocorreu apenas quando o GAC continha a versão mais antiga da DLL.
Portanto, a causa raiz da falha na carga de montagem foram as referências incompatíveis System.Collections.Immutable
. A definição e implementação da interface tinham assinaturas de métodos com aparência idêntica, mas na verdade dependiam de versões diferentes doSystem.Collections.Immutable
, o que significava que o tempo de execução não considerava a classe de implementação correspondente à definição da interface.
A adição do seguinte redirecionamento de ligação ao meu arquivo de configuração do aplicativo corrigiu o problema:
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.1.37.0" newVersion="1.1.37.0" />
</dependentAssembly>