【问题标题】:Could not load file or assembly 'Oracle.DataAccess' 64 bit ODP.NET无法加载文件或程序集“Oracle.DataAccess”64 位 ODP.NET
【发布时间】:2014-10-02 21:58:46
【问题描述】:

我在我的 asp.net 项目中使用ODP.NET,以便应用程序与 Windows 2008 服务器(32 位)上的 oracle 11 g Express 通信。在开发机器上,我有 Windows 7(32 位)。我在开发机器上安装了 Windows 8(64 位)并尝试从 Visual Studio 2012 运行应用程序,它给出了错误“无法加载文件或程序集 'Oracle.DataAccess'”。经过一番搜索,我意识到我必须安装ODP.NET(64 位)才能在 64 位机器上使用它,所以我卸载了 32 位版本并安装了 64 位 ODP.NET。删除了对旧 Oracle.DataAccess 的引用,但仍然面临同样的问题。我错过了什么吗??

【问题讨论】:

  • 您确定 ODP.NET 还支持 Windows 8 吗? oracle.com/technetwork/database/windows/tech-info/… 论文声明将从 11.2.0.4 开始。我能找到的最新版本是 11.2.0.3.20。您还可以检查您的应用程序是否以 x64 或 x32 进程运行。位数必须与您计划使用的 ODP.NET 驱动程序相同。
  • @Alex 谢谢.. 好点.. 你说得非常对,我应该检查一下 Windows 8 是否支持 ODP.NET
  • 还可以将应用程序的目标平台从 AnyCPU 更改为 x86。这将使其始终以 32 位 x86 运行,因此它将加载 32 位客户端库等。
  • 您尝试过 fusionlog 吗?参见例如 mhttp://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx ?

标签: asp.net oracle odp.net


【解决方案1】:

我遇到了同样的问题,经过反复试验,我发现问题出在 32 位和 64 位平台上。

  1. 当我们在 64 位环境中部署 32 位 Oracle.DataAccess.dll 以及 Web 应用程序并在服务器上安装 ODP.net 时,将发生此错误。
  2. 一种解决方案是从 bin 文件夹中删除 Oracle.DataAccess.dll 并自动解析正确的引用。
  3. 第二种解决方案是为 Oracle.DataAccess.dll 设置引用属性 CopyToLocal=false,因此在 IIS 上部署时它不会与构建一起使用,并且不会发生错误。
  4. 我更喜欢的第三种解决方案是为您的应用程序池启用 32 位应用程序,无论 bin 文件夹中是否存在 Oracle.DataAccess.dll,您都不会再次遇到此问题。

希望这会有所帮助..

【讨论】:

    【解决方案2】:

    要安装 ODP.NET,我使用 64bit ODAC
    安装后,要检查是否正确安装了 Oracle.DataAccess 64 位程序集,请转到文件夹:c:\Windows\Microsoft.NET\assembly\GAC_64 并检查那里是否存在 Oracle.DataAccess 文件夹。
    在文件夹中应该有一个包含您正在使用的 Oracle.DataAccess dll 版本的子文件夹。

    在 Visual Studio 中,您必须通过查看 Assemblies->Extensions(而不是使用浏览)来添加引用
    还要检查您在 Visual Studio 中的构建配置,以确保您的应用程序的活动解决方案平台是 64 位的。

    要运行您的网站,您必须使用 IIS,因为 Visual Studio 的开发服务器只能在 32 位模式下运行。
    在 IIS 应用程序池中,将您的应用程序设置为以 64 位运行。 (设置在高级设置中)

    【讨论】:

      【解决方案3】:

      机器的位数无关紧要 - 托管应用程序的位数很重要。 Visual Studio 附带的开发 Web 服务器是 32 位的,因此您需要安装 odp.net 的 32 位版本。如果您想使用 64 位版本进行测试,您可以在 IIS 中运行它。我都安装了。

      在这种情况下,我猜问题更可能是版本号 - 您的应用程序最初引用的版本与您安装的版本不同。简单的做法是删除/重新添加对新安装的 Oracle.DataAccess.dll 的引用。但是,您必须这样做的事实在某种程度上表明您正在安装完整的客户端,而不仅仅是ODP.net install。出于某种原因(除了 oracle 通用安装程序完全是垃圾),完整客户端不包括发布者策略(这将重定向引用),但 odp.net 安装包含。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-13
        • 2012-01-29
        • 2014-03-12
        • 2013-02-23
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多