gpt4 book ai didi

oracle - 为什么 ODP.NET 11 xcopy 部署不能在安装了 Oracle DB 10 的机器上工作?

转载 作者:行者123 更新时间:2023-12-03 15:47:46 26 4
gpt4 key购买 nike

我有一个应用程序在 .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()

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

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

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

最佳答案

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

事实证明,如果您希望应用程序与 ODAC 11 xcopy 部署一起使用,而不管用户可能在她的机器上安装了什么其他东西,您需要做 2 件事:

  • 为进程设置 PATH 环境变量。 (我已经这样做了。)
  • 为进程设置 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);

  • 编辑:同样重要的是要注意,Oracle 不仅会因为环境问题引发此错误,还会在目标计算机上缺少某个文件时引发此错误。尽管有环境设置,但我在其他机器上也遇到了同样的错误,因为我将 Subversion 设置为忽略名为“bin”的目录,因此没有将 OraOps DLL 复制到客户端。

    关于oracle - 为什么 ODP.NET 11 xcopy 部署不能在安装了 Oracle DB 10 的机器上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/491876/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com