9

我正在尝试运行System.Data.OracleClient在 Win7 x64 工作站上使用的 .NET 应用程序。工作站安装了 32 位 Oracle 客户端,导致以下错误消息:

尝试加载 Oracle 客户端库会引发 BadImageFormatException。在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时会出现此问题。

所以这是我漫长的尝试和失败之旅:

  1. 我尝试安装 Oracle 客户端win64_11gR2_client。但是在设置过程中它崩溃了,没有任何评论。
  2. 我遵循来自不同 SO 线程的答案,尝试并提取了instantclient-basic-windows.x64-11.2.0.2.0,并将包含二进制文件的文件夹放在 windows PATH 变量中。我仍然收到相同的错误消息(即使在重新启动后)。
  3. 我按照这个答案的“替代方式”,将文件oci.dll、orannzsbb11.dlloraociei11.dll 复制到我的网站项目的 bin/ 文件夹中。仍然是相同的错误消息。
  4. 我尝试将所有文​​件从即时客户端复制到该目录并再次尝试,但没有成功。
  5. 我安装了ODAC112021Xcopy_x64.zip并将安装文件夹和 bin 文件夹放在 windows PATH 变量中。没有成功。
  6. 我把希望寄托在这个答案上,并查看了注册表中的DllPath(实际上应该与 ODP.NET 相关,而不是System.Data.OracleClient),发现 DllPath 指向正确的 x64 安装的 ODAC,所以,如果我的应用程序不是using System.Data.OracleClient,它应该可以工作,b 但由于它确实使用了它,它仍然失败。
  7. 我用谷歌搜索和stackoverflew,但没有找到我已经提到的帖子的任何其他内容。
  8. 我精心设计了这个 SO 问题,希望能从有见识的 SO 用户那里得到任何有见地的建议。
  9. 从 b_levitt 得到第一个答案后,我尝试在 Global.asax 中添加以下行Application_Start

    Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64");
    Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
    

    C:\OracleProducts\Odac-11.2.0.2.1-x64 是我安装 ODAC 64 位 xcopy 版本的位置。也没有成功。

在相关的说明中,我什至试图强制我的 .NET 应用程序进入 32 位模式但没有成功,但这是另一回事。我需要一个具有前瞻性的解决方案,这意味着 64 位。

4

2 回答 2

4

您的 #5 应该可以工作,但您还需要设置 ORACLE_HOME 环境变量。我已经这样做了很多次,包括最近使用您正在使用的 xcopy 安装。请查看我的 xcopy 安装经验,让我知道您遇到了哪些其他错误。

在我的情况下,我为 asp.net 设置它,但 winforms 更容易。您可以打开一个 cmd 窗口,使用“set”命令设置 PATH 和 ORACLE_HOME 环境变量,然后从同一个 cmd 窗口运行您的应用程序。一旦你解决了错误,你可以使用 Environment.SetEnvironmentVariable 在你的代码中设置这些。

作为记录,我确实避免在客户端机器上安装 oracle 客户端,而是通过 Web 服务处理所有业务逻辑。这样我只需要 web 服务器上的 oracle 组件。

于 2011-07-26T14:38:10.687 回答
1

我遇到了同样的问题。我通过 Oracle 论坛和 stackoverflow 找到了我的大部分答案。我不能发布链接以供参考,但我可以给你一些尝试的东西。

  1. 还将 OraOps11w.dll 与其他 Oracle dll 文件一起包含在您的 bin 目录中。
  2. 转到项目属性|参考路径,将 C:\Windows\Microsoft.NET\Framework64\v2.0.50727 或 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 添加到参考路径,具体取决于项目的框架版本正在使用。
  3. **我不太记得的模糊部分:删除 System.Data.OracleClient 当前引用并从 C:\Windows\Microsoft.NET\Framework64\v2.0.50727 或 C:\Windows\Microsoft.NET 添加新引用\Framework64\v4.0.30319 到参考路径,具体取决于项目使用的框架版本。

看看异常是否消失。

仅供参考,微软将在不久的将来放弃对 Oracle 数据提供程序(在 ADO.NET 中)的支持。它目前通过 .NET 4 工作,但最好开始测试本机 Oracle 驱动程序。

于 2011-08-31T02:01:36.427 回答