是的,我检查了其他类似的问题,但似乎没有一个问题与我遇到的问题相符。
我有一个安装了64位Oracle的64位Windows客户端,但我的应用程序使用的是需要32位Oracle客户端的库。我创建了一个目录并将32位Instant Client Basic文件放入其中,并将建议的条目添加到web.config中,但是当我尝试在本地运行应用程序时,我会抛出两种异常。
这是web.config文件:
<configuration>
<configSections>
<section name="oracle.dataaccess.client"
type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<system.data>
<DbProviderFactories>
<!-- Remove in case this is already defined in machine.config -->
<remove invariant="Oracle.DataAccess.Client" />
<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.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
</system.web>
<oracle.dataaccess.client>
<settings>
<add name="DllPath" value="C:\ora\InstantClient32_12-2-0-1-0"/>
<add name="FetchSize" value="1048576"/>
<add name="PromotableTransaction" value="promotable"/>
<add name="StatementCacheSize" value="10"/>
<add name="TraceFileName" value="C:\ora\InstantClient32_12-2-0-1-0\odpnet2.trc"/>
<add name="TraceLevel" value="0"/>
<add name="TraceOption" value="1"/>
</settings>
</oracle.dataaccess.client>
</configuration>
然而,
OracleConnection conn = new OracleConnection(connectionString);
(其中connectionString是一个有效的连接字符串)抛出,
提供程序与Oracle客户端版本不兼容。
如果我在ConfigSection条目中将4.0.0.0更改为4.112.3.0,它会抛出,
无法加载文件或程序集'System.Data,Version = 4.112.3.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一。系统找不到指定的文件。
请注意,oracle.dataaccess.client是一个32位客户端 - 但我认为system.data可能是64位(有什么办法可以区分吗?)。
另请注意,由于应用程序依赖于也使用32位非托管oracle.dataaccess客户端的外部应用程序,因此无法从OracleClient切换到OracleManagedClient。
我在32位IIS Express上运行它。我也尝试将CPU切换到“x86”,没有任何效果。
我需要做些什么才能让它运行?
编辑当我将DllPath设置更改为不存在的目录时,它仍会抛出“提供程序与Oracle客户端版本不兼容”。我猜DllPath没有做我认为它做的事情,Oracle.DataAccess试图使用我安装的完整版Oracle(64位)。
下一个问题:如何让我的应用程序使用我拥有的32位Instant Client文件?
答案 0 :(得分:0)
原来问题是,Instant Client目录中没有正确版本的OraOps11w.dll。