.NET Framework 4.7.2调用Assembly.GetTypes加载.NET 6.0 DLL报错原因
问题描述
在.NET Framework 4.7.2应用中,通过以下代码加载.NET Core DLL:
var myAssembly = Assembly.LoadFrom(@"c:\temp\mylib.dll");
随后调用myAssembly.GetTypes()获取类型时,抛出如下异常:
Unable to load one or more of the requested types. retrieve the loaderexceptions property for more information.
已知被加载的mylib.dll依赖同目录下的另一个DLL,请问该异常产生的原因是什么?
异常原因分析
- 运行时框架不兼容:.NET Framework与.NET Core属于不同的运行时体系,.NET Core DLL依赖的是.NET Core/.NET 5+专属的基础类库,.NET Framework 4.7.2无法识别这些框架专属的类型,加载过程中会因找不到对应类型触发异常。
- 依赖加载路径不匹配:
Assembly.LoadFrom仅加载指定路径的目标DLL,但不会自动将该路径纳入依赖搜索范围。.NET Framework的程序集加载逻辑默认从应用程序基目录、全局程序集缓存(GAC)等位置查找依赖,而非被加载DLL所在的目录,导致同目录下的依赖DLL无法被定位,进而引发类型加载失败。 - 程序集格式存在差异:.NET Core DLL采用包含
runtime.config.json等配置的.NET标准程序集格式,与.NET Framework的程序集结构有本质区别,.NET Framework的加载器无法正确解析这类程序集的依赖关系和类型信息。
内容的提问来源于stack exchange,提问作者user788454
相关产品推荐
相关产品推荐

