C# Win 7 64位和Win Server 2003 64位上的ODP.NET 32位
我有一个.NET winforms应用程序,它使用ODP连接到oracle db。ODP安装是32位的,我正在Win7 64位机器上开发应用程序。我将开发机器上的平台目标设置为x86,它运行正常。 但当我在WinServer2003 64位机器上测试应用程序时,它给出了一个例外C# Win 7 64位和Win Server 2003 64位上的ODP.NET 32位,c#,.net-4.0,windows-server-2003,windows-7-x64,odp.net,C#,.net 4.0,Windows Server 2003,Windows 7 X64,Odp.net,我有一个.NET winforms应用程序,它使用ODP连接到oracle db。ODP安装是32位的,我正在Win7 64位机器上开发应用程序。我将开发机器上的平台目标设置为x86,它运行正常。 但当我在WinServer2003 64位机器上测试应用程序时,它给出了一个例外 The type initializer for 'Oracle.DataAccess.Client.OracleCommand' threw an exception.
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位上的任何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.
64位开发机器上的ODP版本为11.2.0,而在Server200364位测试机器上的ODP版本也为11.2.0
要在两台机器上运行应用程序,我应该做什么?有什么想法吗?我有几个选择: 为x86编译并在64位服务器上安装32位Oracle客户端,如果您更改Oracle_HOME、TNS_ADMIN、。。。系统变量; 为x86编译并将所有32位DLL与二进制文件打包在一起确保设置了TNS_ADMIN系统变量,否则将无法使用LDAP或tnsnames; 为任何CPU编译应用程序,但为x64和x86位Oracle创建一组不同的dll。DataAccess.dll是为特定体系结构编译的,有一个版本为x64,一个版本为x86; Oracle正在开发,不再需要Oracle客户端,大多数代码库都可以轻松转换,但请注意,它的功能还不完整,只支持Oracle 11+数据库。
在我的odp installaltion下有ORACLE\u BASE\ORACLE\u HOME\odp.net\bin\2.x,但没有ORACLE\u BASE\ORACLE\u HOME\odp.net\bin\4 directorry。大体上我同意。1不需要对oracle_home或tns_admin进行任何更改-较新版本的提供程序首先使用注册表查找非托管DLL。第二-3-只需在dev机器上安装64位版本就足够了。从那里,您不会将Oracle.DataAccess.dll从一台机器复制到另一台机器,而是依赖在GAC中注册的内容。