它适用于某些人,不适用于其他人.
有人可以帮帮我,我如何确定使用哪个版本的“Oralce.DataAccess.dll”,即9或10或11或9.1.*或10.1.*或11. *或12等.
>它是否依赖于我正在安装应用程序的服务器?要么
>它依赖于后端oracle数据库吗?
TLDR版本:
>改用12c 100%托管服务提供商.
>简短的回答是不要将提供程序(Oracle.DataAccess.dll)与不同版本的非托管客户端混合(至少不要向后).
>考虑重新设计以包含一个服务层,从而消除了首先在客户端上安装Oracle提供程序的需要.
完整版本:
首先,让我们确保我们了解旧的未经授权的提供程序(而不是新的12c 100%托管提供程序)的组件.它由两部分组成:
>托管的.net组件 – Oracle.DataAccess.dll
>非托管(非网络)客户端
简单来说,Oracle.DataAccess.dll几乎只是一个包装器,将.net指令转换为非托管客户端的ORACLE-NET指令.
也就是说,当您加载Oracle.DataAccess时,它会尝试查找所需的非托管客户端dll.从Oracle Documentation开始:
The Oracle.DataAccess.dll searches for dependent unmanaged DLLs (such
as Oracle Client) based on the following order:1.Directory of the application or executable.
2.DllPath setting specified by application config or web.config.
3.DllPath setting specified by machine.config.
4.DllPath setting specified by the Windows Registry.
HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\version\DllPath
5.Directories specified by the Windows PATH environment variable.
如果您在计算机上安装了多个客户端,则会发挥作用,因此这可能是您的问题的一部分.如果是这样,最简单的方法是在配置中使用dllPath配置变量:
<configuration> <oracle.dataaccess.client> <add key="DllPath" value="c:\oracle\product\1.1.0-xcopy-dep\BIN"/> </oracle.dataaccess.client> </configuration>
现在,直接回答你的问题 – 我不相信Oracle支持Oracle.DataAccess.dll与它的客户端不匹配(至少不会倒退).你最好的选择是安装你的应用程序安装ODP.net – xcopy version是最小的并包含“即时客户端”或者,你应该考虑最低系统要求 – 即.系统必须至少安装了odp.net的X版本.然后,当目标系统具有客户端的NEWER版本时,您可以针对该最小dll进行编译并依赖发布者策略重定向.
当然这也促使我询问建筑.您是否计划提示用户使用他们的Oracle帐户?如果没有,您必须小心保护应用程序将使用的共享服务帐户.您可能最好调用一个代表客户端进行oracle调用的Web服务 – 为您提供另一个安全层并简化您的客户端部署.