我正在尝试在 Win7 x64 上运行我的 .NET 3.5 WinForms 应用程序。该应用程序使用 NHibernate 和 System.Data.OracleClient 来访问 Oracle 数据库。Oracle 客户端是 32 位的。
启动应用程序时,我收到以下错误消息
尝试加载 Oracle 客户端库会引发 BadImageFormatException。在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时会出现此问题。
作为回应,我将我的构建定位到 x86 平台:
令我惊讶的是,在 Win7 平台上尝试执行新版本时出现了同样的错误消息。
NHibernate 程序集在运行时由Assembly.Load("...");
.
可能是 NHibernate DLL 仍然以 64 位模式运行,而主机 exe 以 32 位模式运行。这对我来说听起来很奇怪。或者可能是出于某种原因,我的应用程序在 64 位模式下运行,即使它是针对 x86 的?
更新:
我使用 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
后缀。
我还尝试并使用 CorFlags 将 32 位标志添加到我的应用程序附带的所有程序集中。它仍然会产生相同的错误消息。
我纳闷……纳闷……纳闷……