2011-03-08 51 views
4

我有一個大的Web應用程序,它應該在64位進程中運行。但是,當我在App Pool上將「啓用32位應用程序」設置爲False時,出現以下錯誤,試圖在IE中運行應用程序:如何使用進程監視器來確定哪個DLL導致BadImageFormatException

不是有效的Win32應用程序。 (來自HRESULT的異常:0x800700C1)

錯誤消息開頭的應用程序名稱缺失,即我在複製和粘貼過程中沒有丟失它。

我被建議使用進程監視器來確定哪個應用程序/ DLL負載實際上導致錯誤,但我不知道從哪裏開始。有人可以請指教嗎?

編輯:我已經嘗試過濾進程監視器上只有w3wp.exe和只有文件系統和進程事件,但只是試圖導航到根URL產生34,012事件。

回答

1

創建一個僅構建爲x64的控制檯應用程序,並使用它在負載之間動態加載所有引用的dll的控制檯輸出。當控制檯應用程序無法加載某個dll時,您會知道它是哪一個。

+0

這是一個很好的策略,但這個解決方案是一個非常複雜的依賴關係。它包含320個項目,其中20個是引用其餘項目的Web項目,並被1個核心Web項目引用。星期天需要一年時間才能應用您的策略。 – ProfK 2011-03-09 16:54:09

+0

@ProfK,無論有多少dll,都可以使用'Directory.GetFiles'遞歸查找項目層次結構中的所有dll,並逐個加載它們。你不需要你的控制檯來實際引用它們,用反射來加載它們。 – 2011-03-10 13:55:31

+0

我想我會實際做到這一點,當我可以再次重現這種情況。 – ProfK 2011-03-11 10:52:06

0

我假設這是一個ASP.Net應用程序。您是否已將您的主要網絡項目平臺目標設置爲x86。

你可以在找到該設置項目屬性|構建|平臺目標

也做任何你的項目引用任何第三方庫?如果是這樣,你知道他們是32位還是64位dll?

+0

這是一個ASP.NET應用程序(因此標籤),但主項目設置爲'任何CPU'。這個應用程序應該構建爲64位應用程序,但我目前正在掃描很長的引用庫列表,以檢查1是否可能設置爲x86。 – ProfK 2011-03-09 07:59:37

相關問題