【问题标题】:ODP.NET 32 bit on Win 7 64 bit and Win Server 2003 64 bitWin 7 64 位和 Win Server 2003 64 位上的 ODP.NET 32 位
【发布时间】:2013-06-22 03:58:48
【问题描述】:

我有一个.NET winforms 应用程序,它使用ODP 连接到oracle db。 ODP 安装是 32 位的,我正在 Win 7 64 bit machine 上开发应用程序。我在开发机器上将平台目标设置为 x86,它运行正常。 但是当我在Win Server 2003 64 bit machine 上测试应用程序时,它给出了异常

The type initializer for 'Oracle.DataAccess.Client.OracleCommand' threw an exception.                                            

UNHANDLED EXCEPTION STACK TRACE:at Oracle.DataAccess.Client.OracleCommand.Dispose(Boolean disposing) 
at System.ComponentModel.Component.Finalize()

UNHANDLED EXCEPTION SOURCE: Oracle.DataAccess

UNHANDLED EXCEPTION INNER EXCEPTION: Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client    at Oracle.DataAccess.Client.OracleInit.Initialize()
at Oracle.DataAccess.Client.OracleCommand..cctor()

UNHANDLED EXCEPTION DATA: System.Collections.ListDictionaryInternal

UNHANDLED EXCEPTION MESSAGE: The type initializer for 'Oracle.DataAccess.Client.OracleCommand' threw an exception.

当我在 Windows 7 64 位上将平台目标设置为 Any CPU 时,会出现异常:

Could not load file or assembly 'Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.

开发机(Win 7 64位)ODP版本为11.2.0,测试机(Win Server 2003 64位)也是11.2.0

我应该怎么做才能在两台机器上运行应用程序?有什么想法吗?

【问题讨论】:

  • 我的ODP安装下有ORACLE_BASE\ORACLE_HOME\odp.net\bin\2.x但没有ORACLE_BASE\ORACLE_HOME\odp.net\bin\4目录。

标签: c# .net-4.0 windows-server-2003 windows-7-x64 odp.net


【解决方案1】:

IMO 有几个选项:

  1. 为 x86 编译并在您的 64 位服务器上安装 32 位 Oracle 客户端(如果您更改 ORACLE_HOME、TNS_ADMIN 等系统变量,可以并行运行);
  2. 为 x86 编译并将所有 DLL 打包为 32 位 Oracle Instant Client 以及您的二进制文件(确保设置了 TNS_ADMIN 系统变量,否则您将无法使用 LDAP 或 tnsnames);
  3. 为任何 CPU 编译您的应用程序,但为 x64 和 x86 位创建一组不同的 dll(Oracle.DataAcess.dll 是为特定架构编译的,有一个用于 x64 的版本和一个用于 x86 的版本);
  4. Oracle 正在开发 a managed Oracle driver,不再需要 Oracle 客户端,大多数代码库都可以轻松转换,但请注意它的功能还不完整,仅支持 Oracle 11+ 数据库。

【讨论】:

  • 大部分我同意。 #1 不需要对 oracle_home 或 tns_admin 进行任何更改 - 较新版本的提供程序首先使用注册表来定位非托管 dll。第二 - #3 - 只需在开发机器上安装 64 位版本就足够了。从那里您不会将 Oracle.DataAccess.dll 从一台机器复制到另一台机器,而是依赖于 GAC 中注册的内容。
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
相关资源
最近更新 更多