Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Win 7 64位和Win Server 2003 64位上的ODP.NET 32位_C#_.net 4.0_Windows Server 2003_Windows 7 X64_Odp.net - Fatal编程技术网

C# Win 7 64位和Win Server 2003 64位上的ODP.NET 32位

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.

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

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中注册的内容。