【问题标题】:C# ODP.NET Load file or assemblyC# ODP.NET 加载文件或程序集
【发布时间】:2012-05-26 08:23:26
【问题描述】:

我最近开始测试使用 ODP.NET (Oracle.DataAccess 4.112.3) 的 C# (4.0) 应用程序

我将此项目设置为针对任何平台并发布应用程序。

当我在收到的客户端机器上运行程序时:

Could not load file or assembly 'Oracle.DataAccess, Version=4.112.3.0,Culture=neutral,
PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load 
a program with an incorrect format.

就像我说的那样,我的目标是“任何 CPU”,并且我还在应用程序中嵌入了 Oracle.DataAccess 程序集。
我在安装了 Oracle 客户端以及没有安装 Oracle 客户端的机器上收到此错误。

感谢任何帮助。

【问题讨论】:

  • 您已将 Oracle 引用属性上的“复制本地”更改为 True 吗?

标签: c# .net oracle odp.net


【解决方案1】:

您或许应该检查 Oracle.DataAccess 程序集在您的机器中是否有任何依赖关系,以及在客户端机器中是否缺少它。

【讨论】:

    【解决方案2】:

    就像我说的,我的目标是“任何 CPU”

    这很可能是问题所在。

    Oracle.DataAccess 对32bit64bit 系统有不同的版本。如果您在 32 位机器上开发,然后在 64 位操作系统上部署,您将收到此消息。

    您可以通过构建以 x86 为目标的应用程序并部署 32 位版本的数据访问组件来轻松解决此问题。

    【讨论】:

    • 对于 Web 应用程序,这意味着应用程序池必须运行 32 位,并且需要 32 位 Oracle 客户端。使用4.112.3时,64位web服务器和oracle客户端的解决方案是什么?本地复制是 32 位的。繁荣。没有它,将使用客户端的 GAC 副本4.112.2。繁荣。将 64 位新版本复制到 bin 会导致其提供程序工厂缺少接口。是否再次尝试使用旧的 GAC_64 版本?或者web.config 中是否缺少一些东西来告诉它使用bin 副本中的新提供程序?
    【解决方案3】:

    正如 Reed Copsey 所说,有两个不同的 DLL。当您以 ANYCpu 为目标时,您的应用程序将在 64 位计算机上以 64 位运行,在 32 位计算机上以 32 位运行。因此,如果您希望您的应用在 32 位或 64 位上运行并在 AnyCPU 模式下运行,则应将 Oracle.DataAccess 的引用更改为 Specific Version=false 并复制 local = false。当您部署到客户端时,他们应该在他们的 GAC 中有 oracle dll,它应该自动选择正确的版本。

    【讨论】:

      【解决方案4】:

      从顶部的 debug Any cpu 更改 optin 以调试 X64,尽管在内部 Any CPu 仅指向 X64 但不起作用,尝试将其更改为 x64,它应该像魅力一样工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 1970-01-01
        • 2010-10-01
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多