使用“11.2 Release 3(11.2.0.2.1)with Xcopy部署”版本安装Oracle数据访问组件的过程似乎存在问题。要解决此问题,您必须在全局程序集缓存中注册缺失的程序集。为了针对此特定版本执行此操作,请在管理员控制台中运行以下命令:
md C:\Windows\assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\
copy %ORACLE_HOME%\odp.net\bin\4\Oracle.DataAccess.dll C:\Windows\assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\
md C:\Windows\assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\
copy %ORACLE_HOME%\asp.net\bin\4\oracle.web.dll C:\Windows\assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\
请注意,此操作仅会注册DLL文件,但不会注册其他语言资源。因此,如果您使用的语言不是英语(de、es、fr、it、ja、ko、pt-BR、zh-CHS和zh-CHT),则还需要使用相应的资源文件进行注册。
如果您的计算机上已安装Visual Studio,则可以使用以下命令:
gacutil /i %ORACLE_HOME%\odp.net\bin\4\Oracle.DataAccess.dll
gacutil /i %ORACLE_HOME%\asp.net\bin\4\oracle.web.dll
注意:在 Visual Studio 安装文件夹下查找 gacutil.exe 文件。
希望这有所帮助。
附注:或者您可以尝试这个。
安装64位ODAC 11.2 Release 3 (11.2.0.2.1) Xcopy版本,适用于Windows x64,下载地址:
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
问题已解决。请按照自述文件中的第4步更新系统路径。
是的,这是我有时遇到的一个非常烦人的问题。主要问题在于Web应用程序错误地使用了32位的Oracle.DataAccess.dll而不是64位,或者反过来。有几种解决方法。
1. 如果您的应用程序是64位并且需要运行32位的Oracle.DataAccess.dll,则可以在应用程序池中启用32位应用程序。
进入IIS,在“应用程序池”的“高级设置”中将“启用32位应用程序”选项设置为true。
2. 更正引用dll。
参考路径应该是由Oracle安装过程配置的系统参考路径。但是,在某些情况下,例如安装或更新新的Oracle版本,最新的DLL不会更新旧的DLL,路径已更改,或者Web应用程序项目中的引用未更新。因此,我们应手动更正Oracle.DataAccess引用。
进入Web应用程序,删除Oracle.DataAccess引用。然后添加正确的Oracle.DataAccess引用。它必须是从您的Oracle安装路径正确的Oracle.DataAccess.dll。例如:
C:\Oracle\product\12.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll
ODP.NET和依赖的非托管DLL版本不匹配 为了强制使用Oracle.DataAccess.dll程序集与其非托管DLL的正确版本,如果Oracle.DataAccess.dll注意到已加载了不匹配版本的依赖非托管DLL,则会引发异常。
https://docs.oracle.com/cd/E11882_01/win.112/e23174/InstallODP.htm#ODPNT152
3. 简单而快速的方法(但不是正确的解决方案)来解决此问题是直接覆盖一个Oracle.DataAccess.dll文件,从Oracle安装路径复制(例如:C:\Oracle\product\12.2.0\client_1\odp.net\bin\4\)到您的Web应用程序的Bin文件夹中。
希望这对你有所帮助。祝好运。
George Netu的回答帮助我解决了问题,但我还需要处理一些额外的小问题:
问题描述:
在C:\Windows\assembly下,我找到了两个Oracle.DataAccess项(GAC文件夹?)。这是由多个Oracle客户端安装引起的。一个项目显示版本2.112.1.0,但实际上是版本2.121.2.0(通过属性->版本可见)。这种不一致性就是bug。
第一次尝试无效:
gacutil /i ...
最终成功:
我登陆了 Gacutil.exe msdn页面,最终能够从 C:\Windows\assembly 文件夹中删除项目。gacutil /u Oracle.DataAccess, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae32233ca
gacutil /u Oracle.DataAccess, Version=2.212.2.0, Culture="Neutral",PublicKeyToken=45e343aae3223abc
gacutil /u Oracle.Web, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae3223def
接着,我重复了两个 gacutil /i ...
命令,两个dll文件的版本号保持一致。
最后重新启动IIS,它就可以正常运行了。
我曾经遇到过同样的问题。
我进入项目属性中的常规部分,将平台目标设置为64位(x64),然后我的问题就解决了。