未能加载文件或程序集“Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它

 

今天做了个小程序放在服务器上的运行数据查询的时候出现 “关于未能加载文件或程序集“Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。试图加载格式不正确的程序”的错误提示!当时第一反应是由于版本不对造成的,由于本机测试是通过的(本机 32位WIN7) 服务器(64位  windowServer2003),立即替换成64位的Oracle.DataAccess.dll ,重新运行还是出现错误!果断ctrl+c,ctrl+v百度,找到以下解决方案:

1.

如果碰巧您又在用64位的操作系统(比如win2008 r2),开发工具又是最先进的vs.net 2010 sp1,但是死活在代码就是连接不上oracle,一直报一些奇怪的错误:比如“Data Provider找不到”啦,“Oracle.DataAccess.Client无法加载”啦之类,正在一筹莫展大声咆哮:“天理,有木有啊,有木有!”之时,恭喜你,多半是遇到了x64/x64的版本问题。(我今天花了近一上午的时间才弄明白问题所在)

 

odp.net安装后,默认会在GAC中部署程序集Oracle.DataAccess,如果你安装的是x86版本,GAC中的就是x86;如果你安装的x64版本,GAC中的就是AMD64版本。 

检测本机GAC中是否有Oracle.DataAccess程序集并查看版本的方法如下:

在vs.net命名行窗口下,输入gacutil.exe /l Oracle.DataAccess

如果看到类似下面的结果:

D:\app\x86\Microsoft Visual Studio 10.0\VC>gacutil.exe /l Oracle.DataAccess

Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1 Copyright (c) Microsoft Corporation.  All rights reserved.

The Global Assembly Cache contains the following assemblies:   Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64   Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86   Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64   Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86

Number of items = 4

表明你的机器上安装了4个版本的Oracle.DataAccess,分别对应于.net 2.0以及.net 4.0的32位/64位版本

如果缺少相关的版本,可以先到oracle官网download,下面以64位odp.net为例:

1、下载完成后,将其解压到某个目录,比如E:\software\oracle11g\ODP.Net,然后键入以下命令: E:\software\oracle11g\ODP.Net\x64>install.bat all c:\odp.net myhome (install all components) 上述命令将自动把所有文件复制到c:\odp.net下

2、然后转到c:\odp.net下,键入命令: c:\odp.net>configure.bat all myhome (configure all component)

将自动向GAC中部署相应的程序集.

然后在vs2010里,添加引用时,应该就能看到Oracle.DataAccess的二个版本

总之一句话:要跑64位的.Net程序,就必须用64位的odp.net,要跑32位的.Net程序,就必须用32位的odp.net,且machine.config中要有相应的provider节点。

最后给出odp.net32位与64位的下载地址:

64位下载地址

http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html

32位下载地址

http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html

2.本人以上方法全部测试,还是报错!于是想了想是不是编译平台选择有问题,果不其然!

找到问题所在,改之 

运行成功!

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值