我正在尝试在 Win7 x64 上运行我的 .NET 3.5 WinForms 应用程序。该应用程序使用 NHibernate 和 System.Data.OracleClient 来访问 Oracle 数据库。 Oracle客户端是32位的。
启动应用程序时,我收到以下错误消息
尝试加载 Oracle 客户端库引发了 BadImageFormatException。
当在 64 位模式下运行并安装了 32 位 Oracle 客户端组件时,会出现此问题。
为此,我将构建目标定为 x86 平台:
出乎我的意料,出现了完全相同的错误消息当尝试在 Win7 平台上执行新版本时。
NHibernate 程序集在运行时加载Assembly.Load("...");
.
难道 NHibernate DLL 仍然以 64 位模式运行,而主机 exe 以 32 位模式运行。这对我来说听起来很奇怪。或者,无论出于什么原因,我的应用程序都以 64 位模式运行,即使它是针对 x86 的?
Update:
我使用 CorFlags 检查了我的二进制文件,它被标记为 32 位:
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 3
ILONLY : 1
32BIT : 1
Signed : 0
我还在任务管理器中检查了它,它有一个*32
suffix.
我还尝试并使用 CorFlags 将 32 位标志添加到all我的应用程序附带的程序集。它仍然产生相同的错误消息。
我很困惑……很困惑……很困惑……
32 位进程无法加载 64 位 DLL,反之亦然(请参阅this了解详情)。这意味着如果您的进程成功加载了 64 位 DLL,那么它肯定是 64 位进程。您可以在任务管理器中(如 Lasse 建议的那样)或通过描述的其他方式进行验证here。该文章还提供了有关 Windows x64 上的 .Net 的更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)