我想在Win7 x64上運行我的.NET 3.5 WinForms應用程序。應用程序使用NHibernate和System.Data.OracleClient訪問Oracle數據庫。 Oracle客戶端是32位。如何強制.NET應用程序運行在32位模式
當啓動應用程序,我得到了以下錯誤消息
嘗試加載Oracle客戶端庫扔BadImageFormatException。 在安裝了32位Oracle客戶端組件的64位模式下運行時,會發生此問題。試圖在執行一個新的版本時
令我驚訝的是,非常相同的錯誤消息出現:
迴應,我針對性我生成的x86平臺Win7平臺。
NHibernate程序集在運行時由Assembly.Load("...");
加載。
難道是NHibernate的DLL仍然運行在64位模式,而主機EXE運行在32位模式。這聽起來很奇怪。或者,無論出於何種原因,即使它的目標是x86,我的應用程序仍以64位模式運行?
更新:
我檢查了我的使用CorFlags二進制文件,它標誌着32位:
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 3
ILONLY : 1
32BIT : 1
Signed : 0
我也檢查了它在任務管理器,它有一個*32
後綴。
我也試過和使用CorFlags到32位標誌添加到所有組件來與我的應用程序。它仍然會產生相同的錯誤信息。
我疑惑不解... ... ...不解
您是否通過任務管理器檢查過您的程序在32位或64位模式下運行時是否崩潰?如果它的進程名稱後面有「* 32」,那麼它是32位的,否則是64位(假設64位操作系統和系統)。 –
你是以x86爲目標的?你的班級圖書館?你的計劃?都? –
@Lasse:更詳細的應用程序由3層,2個DLL和1個EXE組成,而一個DLL引用NHibernate。我已將所有這些目標指向x86,並確保在編譯時EXE項目使用DLL項目的x86 bin。我無法控制的唯一事情就是NHibernate DLL本身。 – chiccodoro