2013-02-08 24 views
6

我正在使用多個現有庫的Windows 8 64位計算機上的Web應用程序上工作。我想使用兩個引用一個本地DLL的C#DLL。這兩個C#DLL都針對64位使用進行了編譯並在測試應用程序中進行了測試。 我的Web應用程序引用了兩個C#DLL,並且應該在IIS 8上運行。 我將兩個C#DLL作爲對項目和本機DLL的引用手動添加到Web應用程序的bin文件夾中。每當我構建並運行解決方案時,我都會看到標題中顯示的異常。 我知道這是在一個進程中運行32位和64位代碼的問題的標誌。因此我嘗試了所有不同的構建配置,但結果從未改變。BadImageFormatException:無法加載文件或程序集......錯誤格式 - 僅適用於Web應用程序

我創建了一個控制檯應用程序,完全按照我在網絡應用程序中所做的操作完成,並且工作完美無瑕。 然而,具有完全相同設置的Web應用程序會引發異常,這對我來說真是令人困惑。

我試過到目前爲止:

  • 更改應用程序池設置爲「啓用32位應用程序」
  • 建立所有的DLL與任何CPU,64位或x86目標
  • 檢查所有的corflags DLL

我可以提供項目導出給每個願意幫助我使這個配置運行的人!

我真的很感謝每一點幫助!

+0

你有任何解決方案還爲這個?因爲我們也遇到同樣的問題,直到現在我們還沒有找到工作解決方案。 – 2013-05-15 03:49:15

+0

嗨,Saeed,很抱歉,我遲到的答案。由於我的項目是一個Web應用程序,因此我決定創建第二個Web應用程序作爲web服務,通​​過REST提供本地dll的功能。我沒有找到任何其他解決方案來解決這個問題。 – JZet 2013-09-11 11:24:54

回答

0

我在我的應用程序得到同樣的問題。在執行以下操作後,它被修復:

*在我的網站文件夾中授予「匿名」用戶的權限。
*將應用程序池從「.NET v4.5 Classic」更改爲「.NET v4.5」。

0

我可以提供的一切幫助確定什麼是不加載。如果它是一個dev服務器,則可能需要安裝相應的sdk才能使用Fusion Log Viewer。如果這不是一個選項,你可以從註冊表如下打開集綁定日誌記錄:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
"LogFailures"=dword:00000001 
"LogPath"="c:\\bindFailureLogs\\" 

只是一定要關閉它,當你完成,存在使用程序集綁定日誌記錄的性能損失。在輸入註冊表項並回收應用程序的應用程序池以啓動日誌記錄之前,請確保該文件夾已存在。這將爲您提供哪些DLL(或依賴,因爲它並不總是顯而易見的,如果它是一個扶養或錯誤信息中列出的DLL)沒有加載以及它試圖從加載它的詳細列表。

你解決問題的應用程序分區表明,有在組裝針對不同版本,因爲只有一個組件的單個版本可以加載到應用程序域的一些相關性得不到滿足多個依賴。對於託管程序集,您可以使用assembly binding redirect,但如果它存在,我不知道它的非託管等價物是什麼。

相關問題