我有一个应用程序,使用.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()
Run Code Online (Sandbox Code Playgroud)
我猜这与运行时绑定策略有关,但在Google上搜索"Oracle/ODAC/ODP.NET运行时绑定策略"并没有发现任何有用的东西.
有谁知道如何解决这个问题?
如果不是这个特定的问题,有人可以指出我如何做我想做的概述:确保我的应用程序使用ODAC 11无论如何?
据我了解,问题在于,虽然 Oracle.DataAccess.dll 与应用程序位于同一目录中,但它无法找到其较低级别的朋友(oci 等),因此出现兼容性错误。
事实证明,如果您希望应用程序能够与 ODAC 11 xcopy 部署配合使用,无论用户在其计算机上还安装了哪些其他内容,您需要执行以下两件事:
为进程设置 ORACLE_HOME 环境变量。(我没有这样做。)
Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process);
Run Code Online (Sandbox Code Playgroud)编辑:还需要注意的是,Oracle 不仅会因为环境问题而抛出此错误,而且如果目标计算机上缺少其中一个文件,也会抛出此错误。尽管有环境设置,我在其他计算机上也遇到了同样的错误,因为我将 Subversion 设置为忽略名为“bin”的目录,因此 OraOps DLL 没有被复制到客户端。
归档时间: |
|
查看次数: |
7024 次 |
最近记录: |