加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么ODP.NET 11 xcopy部署不能在安装了Oracle DB 10的计算机上

发布时间:2020-12-12 16:25:36 所属栏目:百科 来源:网络整理
导读:我有一个应用程序,使用.exe文件所在目录下的本地版本的ODAC 11.我们的想法是,我们希望我们的应用程序使用本地ODAC 11,无论用户在她的计算机上安装了什么. Oracle.DataAccess.dll与.exe位于同一目录中. 当客户端计算机没有安装Oracle客户端时,它可以正常工作,
我有一个应用程序,使用.exe文件所在目录下的本地版本的ODAC 11.我们的想法是,我们希望我们的应用程序使用本地ODAC 11,无论用户在她的计算机上安装了什么.

Oracle.DataAccess.dll与.exe位于同一目录中.

当客户端计算机没有安装Oracle客户端时,它可以正常工作,但在安装了Oracle Database 10.2.0.something的计算机上启动它时出错:

The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.

[Stack Trace]

The provider is not compatible with the version of Oracle client
OracleException
   at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()

我猜这与运行时绑定策略有关,但在Google上搜索“Oracle / ODAC / ODP.NET运行时绑定策略”并没有发现任何有用的东西.

有谁知道如何解决这个问题?

如果不是这个特定的问题,有人可以指出我如何做我想做的概述:确保我的应用程序使用ODAC 11无论如何?

据我了解,问题是虽然Oracle.DataAccess.dll与应用程序位于同一目录中,但它无法找到其较低级别的同名(oci等),因此出现兼容性错误.

事实证明,如果您希望应用程序与ODAC 11 xcopy部署一起使用,无论用户在其计算机上安装了什么,您需要做两件事:

>为进程设置PATH环境变量. (我已经这样做了.)
>为进程设置ORACLE_HOME环境变量. (我没有这样做.)

Environment.SetEnvironmentVariable("PATH",Environment.CurrentDirectory + "oracle11.1odac;" + Environment.CurrentDirectory + "oracle11.1odacbin;",EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("ORACLE_HOME",Environment.CurrentDirectory + "oracle11.1odac",EnvironmentVariableTarget.Process);

编辑:同样重要的是要注意Oracle不仅会出现环境问题而且还会在目标计算机上缺少其中一个文件时抛出此错误.尽管环境设置我在其他机器上得到了同样的错误,因为我将Subversion设置为忽略名为“bin”的目录,因此OraOps DLL没有被复制到客户端.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读