CodeDom + Assembly.Load抛出BadImageFormatException

时间:2014-12-17 14:09:40

标签: c# .net codedom badimageformatexception

我试图从给定的字节数组中执行一个文件,效果很好:

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,我尝试更改目标体系结构,但我无法使其工作。

什么可能导致此异常?

1 个答案:

答案 0 :(得分:1)

问题在于加载程序集的Assembly架构和应用程序。

因此,如果应用程序使用X64构建,并且如果它尝试使用X86加载程序集,则会产生问题。这也适用于相反的情况。

其他情况是,使用Visual Studio构建应用程序时,默认选项是Any CPU。

在这种情况下,当进程为64位时,它将加载为64位,当应用程序为32位时,它将加载为32位。我们限制这种方式,因为一些非托管资源在特殊环境下工作。

我遇到了.net的Oracle客户端这样的问题。