当前位置: 移动技术网 > IT编程>数据库>Oracle > 错误: 未能完成程序集的安装(hr = 0x8007000b),.net程序关于使用Oracle.DataAccess.dll不同版本x86和x64问题,即oracle odp.net 32位/64位版本的问题

错误: 未能完成程序集的安装(hr = 0x8007000b),.net程序关于使用Oracle.DataAccess.dll不同版本x86和x64问题,即oracle odp.net 32位/64位版本的问题

2018年10月19日  | 移动技术网IT编程  | 我要评论

蜀山战记第三季下载,快乐大本营120901,中央电视台1节目表

如果你的机器上安装了odp.net,且确信machine.config也有类似以下结节:(64位+.net 4.0环境下,machine.config可能会有4份,分别对应于.net2.0/4.0的32/64位版本,要每个都检查过去哦)
<dbproviderfactories>
      <add name="oracle data provider for .net" invariant="oracle.dataaccess.client" description="oracle data provider for .net" type="oracle.dataaccess.client.oracleclientfactory, oracle.dataaccess, version=2.111.7.20, culture=neutral, publickeytoken=89b483f429c47342"/>
</dbproviderfactories>
4.0的machine.config中类似下面这样:
1
2
3
<dbproviderfactories>
      <add name="oracle data provider for .net" invariant="oracle.dataaccess.client" description="oracle data provider for .net" type="oracle.dataaccess.client.oracleclientfactory, oracle.dataaccess, version=4.112.2.0, culture=neutral, publickeytoken=89b483f429c47342" />
         </dbproviderfactories>
如果碰巧您又在用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位版本
而且在c:\windows\assembly 目录下也能看到x86与amd64位
注:在资源管理器里,只能看到2.112.2.0的x86/amd64版本,看不到4.112.2.0版本的任何东东(不知道是不是我的个别现象,也有可能另外的版本在其它地方,我没找到)
如果缺少相关的版本,可以先到oracle官网download,下面以64位odp.net为例:
我客户端安装的是oracle 11 32位客户端,如果64位开发程序使用32位的oracle.dataaccess.dll会报如标题异常.
所以我要下载64位的odp.net(odac112040xcopy_64bit.zip)
1、下载完成后,将其解压到某个目录,比如e:\software\oracle11g\odp.net,然后键入以下cmd的dos命令:
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的二个版本

注:在这个界面上,只能看到2.112.2.0与4.112.2.0二个版本号,体现不出x86/x64的区别。
贴一段示例代码:
总之一句话:要跑64位的.net程序,就必须用64位的odp.net,要跑32位的.net程序,就必须用32位的odp.net,且machine.config中要有相应的provider节点。
最后给出odp.net32位与64位的下载地址:
64位下载地址
32位下载地址
参考阅读
http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网