在x-64机器上加载Oracle.DataAccess.Dll问题

时间:2015-01-29 11:31:37

标签: .net oracle dll

我有一个.net exe程序,它使用的是Oracle.DataAccess,Version = 2.121.1.0 dll。我的开发机器和tfs构建服务器都是32位的。在32台机器上一切正常。 但是现在我必须在x64(Windows Server 2012 R2)上迁移这个程序,我的所有问题都从那里开始。我收到着名的错误无法加载文件或程序集'Oracle.DataAccess,Version = 2.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其中一个依赖项。

我google了很多,并尝试了迄今为止的各种事情:

  1. 通过更改项目属性编译选项
  2. ,专门构建可执行目标X86平台
  3. 我已在机器上安装了Oracle dll,并且已在GAC中成功注册
  4. 尝试构建可执行文件以定位'任何CPU',当它不起作用时尝试使用X64
  5. 在app.config文件中专门提供程序集绑定信息,以查看加载DLL的确切位置。
  6. 打开Fusion日志以查看确切的失败原因
  7. 请参阅下面的错误日志:

    29/01/2015 10:57:30; ALERT; System.Exception捕获在Main()29/01/2015 10:57:30;错误; System.BadImageFormatException:无法加载文件或程序集'Oracle。 DataAccess,Version = 2.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其依赖项之一。尝试加载格式不正确的程序。文件名:'Oracle.DataAccess,Version = 2.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'位于XXXX.Common.Components.OraDataAccess..ctor()位于XXXX.Library.ValuesCore.ValuesCore..ctor()位于XXXX .Library.DerivationsCore.Derivations..ctor()at XXXX.Processes.XXXX.Main.Main()===预绑定状态信息=== LOG:User = XX LOG:DisplayName = Oracle.DataAccess,Version = 2.121 .1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342(完全指定)LOG:Appbase = file:/// D:/ Release / LOG:Initial PrivatePath = NULL调用程序集:XXXX.CommonComponents,Version = 1.0.0.0,Culture =中性,PublicKeyToken = e9b31bf34182bd8b。 ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:D:\ Release \ XXXX.exe.Config日志:使用C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ config \ machine.config中的计算机配置文件。日志:后策略引用:Oracle.DataAccess,Version = 2.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342日志:尝试下载新的URL文件:/// C:/Oracle/odp.net/bin/2.x /Oracle.DataAccess.dll。错误:无法完成程序集的设置(hr = 0x8007000b)。探测终止。 29/01/2015 10:57:30;错误;无法加载文件或程序集'Oracle.DataAccess,Version = 2.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其依赖项之一。尝试加载格式不正确的程序。 29/01/2015 10:57:30;警报;(全局)点源ID = 0,计算时间= 29/01/2015 10:57:30。 29/01/2015 10:57:30;停止;

    绝对需要任何帮助,我们将不胜感激。

    由于

1 个答案:

答案 0 :(得分:8)

Oracle.DataAccess.dll的体系结构(x86或x64)必须与已安装的Oracle客户端的体系结构相匹配,并且它们必须与已部署应用程序的体系结构相匹配(即,您是否在“AnyCPU”或“x86”或“64”)。

“AnyCPU”将在64位Windows上以x64为目标。

最佳解决方案是在您的计算机上同时安装x86和x64 Oracle客户端(以及根据ODP.NET),然后任何组合都可以使用。以下是如何执行此操作的说明:Install Oracle x86 and x64

替代解决方案是使用ODP.NET托管驱动程序,无论如何都适用。您可以从此处下载:64-bit Oracle Data Access Components (ODAC) Downloads