我在使用Autofac和大量动态程序集加载的上下文中遇到了此错误。
在执行Autofac解析操作时,运行时将无法加载其中一个程序集。错误消息抱怨Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
。在Windows Server 2012 R2 VM上运行时出现症状,但在Windows 10或Windows Server 2016 VM上未出现症状。
ImplementationAssembly
参考System.Collections.Immutable
1.1.37,并包含IMyInterface<T1,T2>
接口的实现,该接口的定义在单独的中DefinitionAssembly
。DefinitionAssembly
参考System.Collections.Immutable
1.1.36。
IMyInterface<T1,T2>
“未实现” 的方法的参数类型为IImmutableDictionary<TKey, TRow>
,在中定义System.Collections.Immutable
。
System.Collections.Immutable
在程序目录中找到的实际副本为1.1.37版。在我的Windows Server 2012 R2 VM上,GAC包含System.Collections.Immutable
1.1.36 的副本。在Windows 10和Windows Server 2016上,GAC包含System.Collections.Immutable
1.1.37 的副本。仅当GAC包含DLL的较早版本时,才会发生加载错误。
因此,组装加载失败的根本原因是对的不匹配引用System.Collections.Immutable
。接口定义和实现具有外观相同的方法签名,但实际上取决于的不同版本System.Collections.Immutable
,这意味着运行时不会考虑实现类与接口定义匹配。
将以下绑定重定向添加到我的应用程序配置文件中可解决此问题:
<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>