我想運行一個.NET應用程序,它在Win7 x64工作站上使用System.Data.OracleClient
。該工作站安裝了32位Oracle客戶端,導致出現以下錯誤消息:如何告訴System.Data.OracleClient使用64位Oracle驅動程序
嘗試加載Oracle客戶端庫時引發BadImageFormatException。在安裝了32位Oracle客戶端組件的64位模式下運行時,會發生此問題。
所以這是我長久以來的嘗試和失敗的旅程:
- 我試圖安裝Oracle客戶端win64_11gR2_client。但是在安裝過程中它會崩潰而沒有任何評論。
- 我跟着answer from a different SO thread,嘗試並提取了instantclient-basic-windows.x64-11.2.0.2.0,並將包含二進制文件的文件夾放在windows PATH變量中。儘管我仍然收到相同的錯誤信息(即使重新啓動後)。
- 我跟着「另一種方式」從this answer和複製的文件OCI.DLL,orannzsbb11.dll,和oraociei11.dll到我的網站項目的bin /文件夾中。仍然是相同的錯誤信息。
- 我試圖將全部文件從即時客戶端複製到該目錄中,然後重試,但未成功。
- 我安裝了ODAC112021Xcopy_x64.zip並把安裝文件夾和bin文件夾放在windows PATH變量中。沒有成功。
- 我把自己的希望寄託在this answer並審查了DllPath的註冊表(這實際上應該涉及到ODP.NET,而不是
System.Data.OracleClient
),看到DllPath的指向正確的安裝x64的ODAC的,所以,如果我的應用程序沒有使用System.Data.OracleClient
,它應該工作,但是由於它確實使用了它,它仍然失敗。 - 我googled和stackoverflew,但沒有發現我已經提到的職位的任何其他內容。
- 我仔細製作了這個SO問題,希望得到來自開明的SO用戶的任何有見地的建議。
從b_levitt得到第一個答案後,我試圖並添加下列行來在Global.asax在
Application_Start
:Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64"); Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
C:\ OracleProducts \ ODAC-11.2.0.2.1-64是其中我安裝了ODAC 64位xcopy版本。 也沒有成功。
與此相關的,我甚至想force my .NET app into 32bit mode without success,但是這是一個不同的事情。我需要一個前瞻性的解決方案,這意味着64位。
這看起來很有前途。回去工作時會嘗試一下。事實上,我有兩個這個問題的例子,一個是ASP.NET和一個桌面應用程序。 – chiccodoro
你應該沒有任何問題。我對ASP.net,Winforms甚至服務的SetEnvironmentVariable函數感到幸運。這當然只有在您不想在系統級別設置這些變量時纔是必需的。如果這是機器上唯一的oracle客戶機,我只需設置ORACLE_HOME和PATH系統環境變量。 –
嗨b_levitt。我嘗試過,不幸的是我仍然得到相同的錯誤信息(請參閱我更新後的問題中的新增#9) – chiccodoro