是的,我已經檢查了其他類似的問題,但沒有一個似乎與我遇到的問題相匹配。試圖在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位即時客戶端文件?
爲什麼不能使用Oracle託管客戶端?我不明白你的推理。 – mason
我需要包含的外部庫需要非託管的庫 –
您說在你的問題中它是一個外部應用程序。你在評論中說這是一個外部圖書館。這是什麼?如果它是一個庫,爲什麼你不能使用綁定重定向? – mason