9

我想運行一個.NET應用程序,它在Win7 x64工作站上使用System.Data.OracleClient。該工作站安裝了32位Oracle客戶端,導致出現以下錯誤消息:如何告訴System.Data.OracleClient使用64位Oracle驅動程序

嘗試加載Oracle客戶端庫時引發BadImageFormatException。在安裝了32位Oracle客戶端組件的64位模式下運行時,會發生此問題。

所以這是我長久以來的嘗試和失敗的旅程:

  1. 我試圖安裝Oracle客戶端win64_11gR2_client。但是在安裝過程中它會崩潰而沒有任何評論。
  2. 我跟着answer from a different SO thread,嘗試並提取了instantclient-basic-windows.x64-11.2.0.2.0,並將包含二進制文件的文件夾放在windows PATH變量中。儘管我仍然收到相同的錯誤信息(即使重新啓動後)。
  3. 我跟着「另一種方式」從this answer和複製的文件OCI.DLL,orannzsbb11.dll,oraociei11.dll到我的網站項目的bin /文件夾中。仍然是相同的錯誤信息。
  4. 我試圖將全部文件從即時客戶端複製到該目錄中,然後重試,但未成功。
  5. 我安裝了ODAC112021Xcopy_x64.zip並把安裝文件夾和bin文件夾放在windows PATH變量中。沒有成功。
  6. 我把自己的希望寄託在this answer並審查了DllPath的註冊表(這實際上應該涉及到ODP.NET,而不是System.Data.OracleClient),看到DllPath的指向正確的安裝x64的ODAC的,所以,如果我的應用程序沒有使用System.Data.OracleClient,它應該工作,但是由於它確實使用了它,它仍然失敗。
  7. 我googled和stackoverflew,但沒有發現我已經提到的職位的任何其他內容。
  8. 我仔細製作了這個SO問題,希望得到來自開明的SO用戶的任何有見地的建議。
  9. 從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位。

回答

4

您的#5應該已經工作,但您還需要設置ORACLE_HOME環境變量。我已經完成了很多次,包括最近使用的xcopy安裝。請檢查出my experience with the xcopy install並讓我知道你會得到什麼樣的額外錯誤。

在我的情況下,我是爲asp.net設置它,但winforms更容易。您可以打開cmd窗口,使用「set」命令設置PATH和ORACLE_HOME環境變量,然後從同一個cmd窗口運行您的應用程序。一旦你得到了錯誤,你可以使用Environment.SetEnvironmentVariable在你的代碼中設置這些錯誤。

爲了記錄,我確實避免通過Web服務處理所有業務邏輯來在客戶機上安裝Oracle客戶機。這樣我只需要web服務器上的oracle組件。

+0

這看起來很有前途。回去工作時會嘗試一下。事實上,我有兩個這個問題的例子,一個是ASP.NET和一個桌面應用程序。 – chiccodoro

+0

你應該沒有任何問題。我對ASP.net,Winforms甚至服務的SetEnvironmentVariable函數感到幸運。這當然只有在您不想在系統級別設置這些變量時纔是必需的。如果這是機器上唯一的oracle客戶機,我只需設置ORACLE_HOME和PATH系統環境變量。 –

+0

嗨b_levitt。我嘗試過,不幸的是我仍然得到相同的錯誤信息(請參閱我更新後的問題中的新增#9) – chiccodoro

1

我有同樣的問題,你有。我通過Oracle論壇發現了大部分答案,並在這裏以stackoverflow。我無法發佈鏈接供參考,但我可以給你一些事情來嘗試。

  1. 還包括您的bin目錄中的OraOps11w.dll以及其他Oracle dll文件。
  2. 轉到項目屬性|參考路徑,將C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727或C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319添加到參考路徑,具體取決於哪個框架項目正在使用的版本。
  3. **模糊不清的部分:刪除System.Data.OracleClient當前引用,並從C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727或C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319添加到參考路徑,具體取決於項目使用的框架版本。

看看異常是否消失。微軟在不久的將來將會拋棄Oracle數據提供商(在ADO.NET中)的支持。目前它通過.NET 4工作,但開始測試本地Oracle驅動程序是一個好主意。

相關問題