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

什么可能导致此异常?

CodeDom + Assembly.Load throws a BadImageFormatException

问题出在加载程序集的程序集体系结构和应用程序上。

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

另一种情况是,当使用Visual Studio构建应用程序时,默认选项是任何CPU。

在这种情况下,当进程为 64 位时,它将加载为

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

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