Win10环境下.NET连接Oracle数据库进行开发,编译报错175

来源:互联网 发布:中国联通网络测速 编辑:程序博客网 时间:2024/04/30 23:17

小Z上周被Oracle折腾了一周,维护一个.NET项目,我的环境是WIn10+VS2017+.NET Framework 4.0 + Oracle。

老的开发环境是一台Win7,当我通过SVN把项目下载到本地机器并开始编译时,发生了异常“错误175 具有固定名称的Oracle.DataAccess.OracleClient 的ADO.NET提供程序未在计算机或者应用程序注册“。

小Z机器上已经安装了Oracle的数据库和客户端,怀疑是注册配置的问题。小Z首先百度了下,说是machine.config配置文件中缺少相关配置。小Z调试的过程中应该是读取32位的配置文件,在计算机的“C:\Windows\Microsoft.NET\Framework\v4.0.30319\machine.config”,然后小Z拷贝了一下原来开发机器的对应配置,发现依旧不对。

于是小Z继续百度,说是要去Oracle官网上面下载odp.net或者odac进行安装。小Z由于工作环境有网速限制,所以采取了下载ODAC122010Xcopy_x64.zip和32位的压缩包,采取安装后注册的方式,即第一步先将压缩包解压到d盘,然后运行命令 install all XXX odac,第二步运行安装后的路径下面的odp.net/configure.bat 的 configure all 命令,然后编译,依旧报错。

小Z又百度,并且上stackoverflow上去搜解决方案,基本只有问题,没有answer。其中有一个观点是看一下gacutil.exe /l Oracle.DataAccess,看一下在全局缓存程序集中是否有该dll,小Z发现只有32位的。

最终,小Z在本周四开启自爆模式,在公司再次尝试该问题的解决,终于得到了answer。

首先,还原了machine.config自己手工添加的配置信息,随后去Oracle官网上下载了ODAC122010_x86.zip,完整的32位odac压缩包安装文件(400MB+),随后安装后,machine.config中增加了配置信息:

<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<section name="oracle.unmanageddataaccess.client" type="OracleInternal.Common.CustomSectionHandler, Oracle.DataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
 

以及

<system.data>

    <DbProviderFactories>
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
      <add name="ODP.NET, Unmanaged Driver" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET, Unmanaged Driver" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
         </DbProviderFactories>
</system.data>

于是小Z觉得有戏,重启了机器后,再次进入系统,编译正常通过。

OK,又解决了一件头疼的事情。


阅读全文
0 0