CodeDom + Assembly.Load throws a BadImageFormatException
本文关键字:BadImageFormatException throws Load Assembly CodeDom | 更新日期: 2023-09-27 18:34:32
我正在尝试从给定的字节数组执行一个文件,效果很好:
byte[] bytes = File.ReadAllBytes(@"C:'Location'program.exe");
MessageBox.Show(bytes.Length) // The same size for both the VS compiled and CodeDom compiled application
Assembly assembly = Assembly.Load(bytes); //Throws exception when compiled with CodeDOM
此代码在我使用 Visual Studio 生成的应用程序中编译并运行良好。
但是,当我将这段代码添加到我使用 CodeDOM 生成的应用程序中时,它会抛出 BadImageException。
CodeDOM 生成的应用程序可以很好地读取字节,因为两个版本输出相同的 byte[] 长度。
我尝试将目标框架从 .NET 2.0 更改为 .NET 4.5,我尝试更改目标体系结构,但我无法让它工作。
什么可能导致此异常?
问题出在加载程序集的程序集体系结构和应用程序上。
因此,如果使用 X64 构建应用程序并且如果它尝试使用 X86 加载程序集,则会产生问题。这也适用于相反的情况。
另一种情况是,当使用Visual Studio构建应用程序时,默认选项是任何CPU。
在这种情况下,当进程为 64 位时,它将加载为64 位,当应用程序为 32 位时,它将加载为 32 位。我们限制这种方式是因为某些非托管资源在特殊环境下工作。
我在.net的Oracle客户端上遇到了这样的问题。