尝试在64位Windows客户端上运行32位.NET应用程序

时间:2017-08-23 14:28:32

标签: asp.net oracle

是的,我检查了其他类似的问题,但似乎没有一个问题与我遇到的问题相符。

我有一个安装了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文件?

1 个答案:

答案 0 :(得分:0)

原来问题是,Instant Client目录中没有正确版本的OraOps11w.dll。