我一直在使用1个oracle客户端,一切都很好,但我不得不再安装2个不同版本的Oracle。现在它正在引发问题。
我通过重新排列系统环境变量中的路径值来解决1,将原始Oracle路径放在前面。但仍然在与2争吵,我调查了Process Explorer的dll加载。它看起来像加载错误的oracle dll,如11.2和12.1中的另一个。
当然我可以通过卸载所有这些神谕来解决这个问题,并重新安装一个。但我必须将这3个用于不同的开发设置。
如何修复这些oracle路径问题?有没有人有线索?
答案 0 :(得分:2)
对于较旧的“非托管”提供程序,ODP.net由托管部分(oracle.dataaccess.dll)和非托管部分(几乎所有oracle主目录中的dll)组成。当oracle.dataaccess.dll被加载时,它会通过以下搜索顺序找到它需要的无法访问的dll:
Oracle.DataAccess.dll搜索依赖的非托管DLL(例如 作为Oracle客户端)基于以下顺序:
Directory of the application or executable. DllPath setting specified by application config or web.config. DllPath setting specified by machine.config. DllPath setting specified by the Windows Registry. HKEY_LOCAL_ MACHINE\Software\Oracle\ODP.NET\version\DllPath Directories specified by the Windows PATH environment variable.
我的第一个猜测是你的bin目录中有一个旧版本的oracle.dataaccess.dll。最简单的解决方法是指定一个“DllPath”配置变量并指向该asp.net站点的旧oracle主目录:
<configuration>
<oracle.dataaccess.client>
<add key="DllPath" value="C:\app\user\product\11.1.0\your_old_client\bin"/>
...
你可以尝试的另一件事是删除它 - 这样,它可以从gac加载一个“更好”的dll(即使你安装的版本更新,安装程序通常会安装发布者策略来重定向任何引用,至少对于相同的主要版本)。我这样说只是为了对如何避免将来的情况提供一些见解。我在这里有另一个答案: https://stackoverflow.com/a/15509914/852208
答案 1 :(得分:0)
这些程序集保存在GAC中。
转到C:\Windows\assembly
,选择要删除的程序集,右键单击并选择Uninstall
。这些程序集将不再被您的程序加载。
如果必须重新安装它们,它们仍然在Oracle文件夹中,因此您可以使用gacutil
再次从那里安装它。