我在使用Oracle 11 (32位)与Oracle 12 (64位)时遇到了问题。因为这里的一些平台仍然有32位的windows,所以我们使用32位的Oracle11进行标准化。WinForms应用程序和Asp站点在我们所有的平台上都能在32位模式下正常工作。
只有我的开发机器有两个Oracle版本。我使用VisualStudio 2015进行开发,使用IISExpress进行调试。但是,当在我的开发机器上运行IIS时,它尝试运行64位Oracle12,并抛出异常Oracle.DataAccess.Client: the provider is not compatible with the version of Oracle Client.
卸载Oracle12似乎很复杂,所以我所做的是通过将安装目录重命名为c:\oracle\product\12.1.0XXX来禁用它。另外,我删除了注册表项HKLM/Software/Oracle,因为它指向Oracle12,并且不存在于只包含Oracle-11的服务器上。
我还从GAC卸载了Oracle 2.121.2.0的dll。
重新启动后,VS2015和IISExpress仍然可以正常运行Oracle代码,但是使用IIS时,我看到了错误:Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)。这表明IIS在IISExpress之外的另一个地方查找Oracle DDL。
在Oracle11之前的PATH变量中提到了Oracle12。因为我现在不知道如何轻松地更改路径,在过去它是在autoexec.bat中设置的,我认为通过重命名Oracle12路径,它已经得到了解决。应用程序将探测PATH中提到的所有目录,如果Oracle12目录不存在,将继续查找PATH中的下一个目录。但是,如果IIS显式查找OraOps12.dll,它将永远不会使用Oracle11。
我的问题是如何让IIS使用与IISExpress相同的Oracle DLL?
发布于 2017-10-20 21:08:41
什么都不能用,所以我卸载了Oracle12,解决了这个问题。
我试图解决的原因是卸载Oracle12非常麻烦。只能卸载所有Oracle,然后重新安装Oracle 11,所有步骤都非常慢。整个工作大约花了一个半小时。然后我发现我的dll版本是2.112.1.0而不是2.111.7.20,所以我不得不在Visual Studio中替换几个(但不是所有)项目中的引用才能构建。
底线是您不应该在您的C# Asp.Net项目中尝试Oracle12中的64位Oracle。只要坚持使用32位Oracle 11,否则你会后悔的。
https://stackoverflow.com/questions/46811947
复制相似问题