【发布时间】:2014-12-17 14:09:39
【问题描述】:
我正在尝试从给定的字节数组中执行一个文件,效果很好:
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,我尝试更改目标架构,但无法使其正常工作。
什么会导致这个异常?
【问题讨论】:
-
这可能是因为 64bit 和 32bit 冲突。您可以尝试在不同类型的架构中加载程序集。您的程序集有问题,或者加载该程序集的程序有问题
-
我将程序集的目标体系结构设置为 x86,现在 codeDOM 应用程序可以毫无问题地加载它,谢谢!但是为什么用VS2012生成的应用没有这个问题呢?
-
不,不是那样的。这是您构建项目的方式。我将在答案中详细描述,以便场景对其他人有所帮助。
-
什么不像什么?我用 VS 构建的应用程序可以正常运行“任何 cpu”程序集,而 CodeDOM 生成的应用程序只能在我的 64 位系统上运行“x86”?
-
这样做根本没有意义,请改用 CompilerResults.CompiledAssembly。
标签: c# .net codedom badimageformatexception