如何让IIS使用与IIS-Express相同版本的Oracle

时间:2017-10-18 13:58:08

标签: oracle iis oracle11g iis-express oracle12c

我遇到了Oracle 11(32位)与Oracle 12(64位)的问题。由于这里的一些平台仍然有32位窗口,我们使用32位Oracle11进行标准化。 WinForms应用程序和Asp站点在我们所有平台上都可以在32位模式下正常运行。

只有我的开发机器有两个Oracle版本。我使用VisualStudio 2015开发并使用IISExpress进行调试。但是,在我的开发计算机上运行IIS时,它会尝试运行64位Oracle 12,并抛出异常Oracle.DataAccess.Client: the provider is not compatible with the version of Oracle Client.

卸载Oracle 12似乎很复杂,所以我做的是通过将安装目录重命名为c:\oracle\product\12.1.0XXX来禁用它。此外,我删除了注册表项HKLM/Software/Oracle,因为它指向Oracle 12,并且在仅具有Oracle-11的服务器上不存在。

我还从GAC卸载了用于2.121.2.0的Oracle 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。由于我今天不知道如何轻松更改PATH,在过去它是在autoexec.bat中设置的,我认为通过重命名Oracle12路径,它得到了处理。应用程序将探测PATH中提到的所有目录,如果Oracle12目录不存在,将继续查看PATH中的下一个目录。但是,如果IIS明确查找OraOps12.dll,它将永远不会使用Oracle11。

我的问题是如何让IIS使用与IISExpress相同的Oracle DLL?

1 个答案:

答案 0 :(得分:0)

没有任何效果,所以我卸载了Oracle 12.这解决了这个问题。

我试图解决的原因是卸载Oracle 12非常麻烦。只能卸载所有Oracle,然后重新安装Oracle 11,其中所有步骤都很慢。整个工作大约需要一个半小时。然后事实证明我有2.112.1.0而不是2.111.7.20的dll版本,所以我必须替换Visual Studio中几个但不是所有项目中的引用才能构建。

最重要的是,您不应该在C#Asp.Net项目中尝试使用Oracle 12中的64位Oracle dll。坚持使用32位Oracle 11,否则你会后悔的。