首页 文章

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

提问于
浏览
3

我有一个.net exe程序,它使用的是Oracle.DataAccess,Version = 2.121.1.0 dll . 我的开发机器和tfs构建服务器都是32位的 . 在32台机器上一切正常 . 但是现在我必须在x64(Windows Server 2012 R2)上迁移这个程序,我的所有问题都从那里开始 . 我得到了着名的错误 Could not load file or assembly 'Oracle.DataAccess, Version=2.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. .

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

  • 通过更改项目属性Compile选项,专门构建可执行目标X86平台

  • 我已在机器上安装了Oracle dll,并且已在GAC中成功注册

  • 尝试构建可执行文件以定位'Any CPU',当它不起作用时也尝试了X64

  • 在app.config文件中专门提供了程序集绑定信息,以查看加载dll的确切位置 .

  • 打开Fusion日志以查看确切的故障原因

请参阅下面的错误日志:

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 回答

  • 8

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

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

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

    一个替代解决方案是使用ODP.NET托管驱动程序,这在任何情况下都适用 . 你可以从这里下载:64-bit Oracle Data Access Components (ODAC) Downloads

相关问题