試圖加載格式不正確的程序。 (異常來自 HRESULT:0x8007000B)

兩種緣由:es6

第一種爲程序的運行以平臺系統位數不匹配,第二種則是該死的VS整出來的...網站

通常在下面三種情景下會發生.spa

1.64位系統上C#調用32位的C++ *.dll調試

2.64位系統上IIS發佈含有32位的 *.dll應用程序時orm

3.64位系統上編寫C++ *.dll,在64位系統上經過 C#調用 ,可能成功,也可能失敗,失敗就報BadImageFormatException 異常,也是最二的一種狀況.是由該死的VS整出來的blog

 

解決方法以下:資源

1.VS在64位系統下面,編譯調試某個C++的API的時候,報錯:未處理BadImageFormatException 試圖加載格式不正確的程序。 (異常來自 HRESULT:0x8007000B)開發

詳見下圖:get

 

    其緣由是該API是在32位系統下面開發的,在64位系統上面開發編譯的時候須要將生成的目標平臺設爲X86it

    方法是:

    在右邊的「解決方案資源管理器」裏,右鍵該項目點擊屬性。在屬性窗口裏選擇「生成」——「目標平臺」下拉里選中「X86"便可。見下圖:

 

  而後保存從新編譯

 

緣由:程序集之間的通信要麼全是64位環境下的,要麼全是32位環境下的。不能混編訪問。否則會出現「試圖加載格式不正確的程序」的錯誤;

解決辦法是把發佈網站的程序池開通32位兼容性便可,以下圖:

 

3.若是上面的沒有解決,那就是VSC#工程的問題,打開對應的工程文件(*.csproj),以下圖<Prefer32Bit>false</Prefer32Bit>節點

 

下面是MSDN的解釋:

CSharpProjectConfigurationProperties6.Prefer32Bit 屬性

獲取或設置一個標誌,指示是否首選的 32 位平臺。

命名空間:  VSLangProj110

程序集:  VSLangProj110(在 VSLangProj110.dll 中)

語法

C#

bool Prefer32Bit { get; set; }

屬性值

類型:System.Boolean

返回表示 32 位首選項的標誌。 返回true若是 32 位是首選。 不然,返回false。

相關文章
相關標籤/搜索