首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

WebServers 發布 Oracle 客戶端模式不一致:BadImageFormatException 解決方案

     編輯:Oracle 教學

錯誤現象

System.InvalidOperationException: 嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。
如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現此問題。
---> System.BadImageFormatException: 試圖加載格式不正確的程序。 (HRESULT: 0x8007000B)

根因分析

  • 伺服器為 64 位環境,但 IIS 應用程式集區設為「啟用 32 位應用程式 = True」
  • 導致工作進程以 32 位模式啟動,載入 32 位 CLR,進而嘗試載入 32 位 Oracle Client DLL
  • 實際機器僅安裝 64 位 Oracle Client,找不到 32 位 DLL → 拋出 BadImageFormatException

解決方案

方案 A:調整 IIS 應用程式集區(推薦)

  1. 開啟 IIS 管理員 → 應用程式集區
  2. 選擇對應集區 → 右鍵「進階設定」
  3. 將 啟用 32 位應用程式 設為 False
  4. 回收集區或重啟 IIS

此後進程以 64 位模式運行,匹配已安裝的 64 位 Oracle Client。

方案 B:安裝 32 位 Oracle Client(不推薦)

若程式碼強制需 32 位(如舊版 COM 元件),需額外安裝 32 位 Oracle Client(Instant Client 或完整 Client),並確保 PATH 優先指向 32 位 bin 目錄。

驗證步驟

-- 檢查目前進程位數
SELECT * FROM V$VERSION;  -- 含 64bit Production 字樣即為 64 位

-- 或在 .NET 程式碼
Console.WriteLine(Environment.Is64BitProcess);  -- True 為 64 位

最佳實務建議

  • 生產環境統一 64 位:OS、IIS、Oracle Client、應用程式(Any CPU / Prefer 32-bit = false)
  • 避免同機器同時安裝 32/64 位 Oracle Client,易造成 PATH 衝突
  • 使用 Oracle.ManagedDataAccess NuGet 套件可免安裝 Client,直接嵌入 Managed Driver,徹底避免位數問題
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved