2017-08-23 93 views
0

是的,我已經檢查了其他類似的問題,但沒有一個似乎與我遇到的問題相匹配。試圖在64位Windows客戶端上運行32位.NET應用程序

我有一個安裝了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,版本= 4.112.3.0,文化=中性,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位即時客戶端文件?

+0

爲什麼不能使用Oracle託管客戶端?我不明白你的推理。 – mason

+0

我需要包含的外部庫需要非託管的庫 –

+0

您說在你的問題中它是一個外部應用程序。你在評論中說這是一個外部圖書館。這是什麼?如果它是一個庫,爲什麼你不能使用綁定重定向? – mason

回答

0

原來問題是,Instant Client目錄中沒有正確版本的OraOps11w.dll。

相關問題