關於在64位的windows操作系統上運行32位asp.net web應用程序的時候,出現
試圖加載格式不正確的程序。 (異常來自 HRESULT:0x8007000B)
網上能搜到各種版本的說法,有時候不經過自己驗證還真不敢隨便相信。不過有一點是沒錯,就是.net運行時不支持混合進程的,也就是說x64和x86編譯的程序集不能在同一進程中同時執行,據說.net framework4之后是改進了,能允許共存,目前沒有證實的依據,因為大部分應用程序都是選的AnyCPU編譯的。
當.net開發的桌面應用程序依賴的程序集是以x86平台為目標編譯的,那么宿主環境仍然要以x86編譯才可以正常執行。這里我所記錄的是Web應用程序在IIS7及以上服務器部署時遇到的問題。
問題場景:
某個asp.net web project(注意是web project,不是web site)為實現wav文件轉mp3,使用了一個網上最容易找的組件。其中包含了 yeti.mmdia.dll,yeti.mp3.dll和lame_enc.dll三個程序集。整個項目用AnyCPU平台編譯,在windows2003 32位操作系統上,IIS 6.0的服務器中部署運行正常,但遷移到windows2008r2 64位操作系統上,IIS7的服務器中就出現上面“試圖加載格式不正確的程序。”的異常。折磨了不大會,發現原來是IIS7的應用程序池默認是禁止32位應用程序運行的。如圖設置為true就行了,用不着費勁去換平台編譯web project。

