ODP.NET 32位在Win 7 64位和Win Server 2003 64位

时间:2013-06-25 11:18:09

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

我有一个.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.

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

如何在两台机器上运行应用程序?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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+数据库。