.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路径关联到托管程序集,可以通过以下逻辑处理:
- 获取exe文件所在目录
- 查找同名的dll文件(比如exe是
MyProgram.exe,则查找MyProgram.dll) - 加载该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
相关产品推荐
相关产品推荐

