ASP.NET 應用程式執行於 Windows x64 環境

原本在 32 位元的 Windows 系統上運作的 ASP.NET 應用程式,改放到 64 位元的環境上跑,瀏覽網頁時出現列錯誤訊息:

無法載入檔案或組件 'YourAssemblyName' 或其相依性的其中之一。 試圖載入格式錯誤的程式。
......
例外詳細資訊: System.BadImageFormatException: 無法載入檔案或組件 'YourAssemblyName' 或其相依性的其中之一。 試圖載入格式錯誤的程式。

....
組件載入追蹤: 下列資訊在確定為何無法載入組件 'YourAssemblyName' 時是有幫助的。


警告: 組件繫結記錄切換為 OFF。
若要記錄組件繫結失敗,請將登錄值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 設為 1。
注意: 與組件繫結失敗記錄相關的效能會有部分負面影響。
若要關閉此功能,請移除登錄值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

雖然錯誤訊息提示你可以啟用組件繫結記錄,但這個錯誤,就算使用 Fusion Log Viewer 來觀察組件載入的過程,也看不出個所以然。組件繫結記錄的內容只能看出哪個組件載入失敗了,並沒有告訴你原因。真正的原因並不在相依組件找不到,而是錯誤訊息中提示的 System.BadImageFormatException。

欲解決此問題,可修改 ASP.NET 應用程式所屬的應用程式集區的設定:啟用 32 位元應用程式 。參考下圖:


當此選項設定為 True,你的 ASP.NET 應用程式就是以 32 位元的模式執行,這種模式有個名稱,叫做 Windows on Windows64(WoW64)。這些以 WoW64 模式執行的程式,在「工作管理員」裡面會以「*32」標示,如下圖:

5 則留言:

技術提供:Blogger.
回頂端⬆️