You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载.NET 8.0 exe时遇“Bad IL format”错误,能否将其作为程序集打开?

.NET 8.0 EXE能否作为程序集加载?

答案是可以,但得看你的EXE是哪种类型。

错误原因

你碰到的「Bad IL format. The format of the file '<file_path>.exe' is invalid.」错误,核心原因是.NET 8.0默认生成的EXE可能属于以下两种非标准IL程序集类型:

  • 单文件发布的EXE:这是打包了.NET运行时和程序集的自包含文件,本身不是直接可加载的纯IL程序集。
  • 本机AOT编译的EXE:已经直接编译成机器码,完全没有保留IL代码,自然无法被Assembly.LoadFrom这类针对IL程序集的加载方法识别。

而将<OutputType>改为Library后生成的DLL是标准.NET类库,属于纯IL格式,因此加载完全正常。

可行的解决办法

要让EXE能被作为程序集加载,需要调整项目的编译/发布设置:

  • 关闭单文件发布:在项目设置中取消勾选「单文件」选项,或者在.csproj文件中添加<PublishSingleFile>false</PublishSingleFile>配置。
  • 禁用本机AOT:确保项目中没有启用<PublishAot>true</PublishAot>配置,因为AOT编译会将IL代码彻底转换为机器码,无法再作为程序集加载。
  • 生成框架依赖的EXE:这种EXE本质是一个轻量级启动器,真正的程序集内容会存放在同名的.dll文件中(比如YourApp.exe对应YourApp.dll),你可以直接加载该DLL;如果是框架依赖且非单文件的EXE,本身也包含IL代码,直接加载EXE文件也可以正常工作。

另外,也可以先将EXE文件读取为字节流,再通过Assembly.Load(byte[])方法加载,但这种方式仅对包含IL代码的EXE有效,单文件或AOT编译的EXE依旧无法加载。

总结

只要你的.NET 8.0 EXE是框架依赖、非单文件、非AOT编译的标准IL格式EXE,就可以用Assembly.LoadFrom或Assembly.LoadFile正常加载。如果是单文件或AOT编译的EXE,则无法直接作为程序集加载,只能通过改为Library或者调整编译设置来解决问题。

内容的提问来源于stack exchange,提问作者Yola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:32:06