0

我正在尝试从给定的字节数组执行文件,效果很好:

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

什么可能导致此异常?

4

1 回答 1

1

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

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

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

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

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

于 2014-12-17T14:45:30.917 回答