C#反射加载程序集报BadImageFormatException错误的原因与解决方法
问题原因
该System.BadImageFormatException和代码语法、文件路径无关,本质是.NET 6(.NET Core/.NET 5+)与传统.NET Framework的编译输出结构差异导致:
- .NET Framework生成的
.exe本身是包含IL代码的托管程序集,可直接通过Assembly.LoadFrom加载 - .NET 6默认编译输出的
.exe是原生apphost启动器,属于非托管PE文件,仅负责查找本机.NET运行时、加载同目录同名.dll托管程序集后执行入口,本身不包含任何IL代码。运行时尝试从这个原生文件中读取IL结构时自然会报格式无效错误。
你代码里加载的console-custom.exe就是这个原生启动器,不属于可被反射加载的托管程序集。
修复方案
直接修改加载路径,指向同目录下真正存储IL代码的同名托管dll即可:
// 替换原exe路径,加载托管dll程序集 Assembly a = Assembly.LoadFrom("C:\\Users\\bobmarley\\desktop\\temp\\csharp-reflection\\get-type-from-assembly\\bin\\Debug\\net6.0\\console-custom.dll");
同类异常的其他常见触发场景:
- 进程架构与待加载程序集架构不匹配(如x86进程加载纯x64编译的程序集,或反向加载)
- 尝试加载非托管C/C++等原生编译的DLL/EXE
- 待加载文件损坏、不符合标准PE格式
内容的提问来源于stack exchange,提问作者user32882
相关产品推荐
相关产品推荐

