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

.NET Framework迁移.NET 8:Assembly.LoadFrom加载exe报IL格式错误

问题分析与解决

首先纠正你的认知:.NET 5+(包括.NET 8)生成的exe和.NET Framework的exe完全不同,你的旧理解只适用于.NET Framework。

  • 在.NET Framework中,exe本身就是包含IL代码的托管程序集,它和dll的区别仅在于是否包含入口点(Main方法),本质都是托管程序集,因此可以用Assembly.LoadFrom加载。
  • 而在.NET 5+中,默认生成的exe是本机宿主程序(属于PE格式的非托管可执行文件),它的作用只是加载对应的托管dll(即你提到的MyProgram.dll)并启动应用,本身不包含托管IL代码。这就是加载exe会报“Bad IL format”错误的原因——它根本不是托管程序集,自然无法被Assembly.LoadFrom识别。

解决方法

如果需要通过加载程序集获取依赖信息,直接加载对应的dll文件即可,这是.NET 5+下的标准做法。

如果确实需要从exe路径关联到托管程序集,可以通过以下逻辑处理:

  1. 获取exe文件所在目录
  2. 查找同名的dll文件(比如exe是MyProgram.exe,则查找MyProgram.dll)
  3. 加载该dll文件

示例代码:

string exePath = @"C:\Test\MyProgram.exe";
string dllPath = Path.Combine(Path.GetDirectoryName(exePath), $"{Path.GetFileNameWithoutExtension(exePath)}.dll");
if (File.Exists(dllPath))
{
    var myAssembly = Assembly.LoadFrom(dllPath);
    // 后续处理依赖项逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:09