【问题标题】:Oracle.DataAccess.dll can not be located though it existsOracle.DataAccess.dll 虽然存在但无法定位
【发布时间】:2011-12-16 17:03:03
【问题描述】:

当我在 IIS 7.5(Windows Server 2008 R2 x64) 上浏览在 Visual Studio 2008 中开发的 ASP.Net 应用程序时,我收到配置错误,指出无法找到 Oracle.DataAccess, Version=2.111.7.20 文件。我已经为 .NET 安装了包含该文件的 Oracle 数据提供程序。当我设置 ODP.net 时,它将 dll 文件放入 c:\app....\odp.net\PublisherPolicy 文件夹。我以防万一也将这些文件复制到 C:\Windows\Microsoft\Framework 文件夹,但我仍然遇到同样的错误。有人可以帮我解决这个问题吗?非常感谢任何帮助

【问题讨论】:

  • 你确认你安装的版本是2.111.7.20吗?

标签: asp.net oracle


【解决方案1】:

ODP.NET 安装可能非常棘手。有很多事情可能会出错:

  • 可能存在版本不匹配(2.111.7.20 与 2.112.1.0 与 2.112.2.0)。
  • 32 位和 64 位之间可能存在不匹配。
  • .NET DLL 可能存在,但未找到其中一个依赖项。

首先尝试检查 32/64 位不匹配。在 IIS 中,您可以配置您的 Web 应用程序是以 32 位还是 64 位运行。要检查它,请查看任务管理器并查看 w3wp.exe 进程是否具有*32 标记。然后转到文件资源管理器中的C:\Windows\Assembly。这是显示 GAC 的特殊视图。如果它在 Oracle.DataAccess 行的最后一列中显示 x86,那么它是 32 位的。如果它说 AMD64,那么它是 64 位的。

在同一行,您还可以找到确切的版本号。查看VisualStudio,ASP.NET项目是否使用同一个。

如果我没记错的话,Oracle.DataAccess.dll的主要依赖是OraOps11w.dll,应该在Oracle客户端目录的BIN目录下。该目录通常通过注册表 (HKLM\SOFTWARE\ORACLE\ODP.NET\<version>\DllPath) 定位。确保查看正确位数的注册表(32 位与 64 位)。

还有更多可以做的事情。但是这里的这些通常可以解决问题。

【讨论】:

  • 非常、非常深刻和正确,以及有用的解释。太感谢了。你对位问题是绝对正确的。服务器本身是 x64,但在任务栏中运行的任何内容都标记为 *32。我希望我是一名版主,能够为你投票 100 分。
  • 出现32/64不匹配怎么办?
  • @FedorSteeman 如果您的服务器是 64 位,而您的应用程序是 32 位,您可以在 IIS 的应用程序池高级设置中启用 32 个应用程序。否则,获取一个匹配位数的 dll。
  • Oracle 提供 32 位和 64 位版本,但 ODP 取决于 Oracle 客户端。因此,对于 64 位 ODP.NET,您下载 64 位 Oracle 客户端,对于 32 位也是如此。对于版本不匹配,您只需更改 .config 文件(web.config 或 app.config)以使用程序集绑定重定向绑定到正确的版本
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2012-03-28
  • 2020-02-01
相关资源
最近更新 更多