Как использовать Process Monitor, чтобы определить, какая DLL вызывает исключение BadImageFormatException - PullRequest
4 голосов
/ 08 марта 2011

У меня большое веб-приложение, которое должно работать в 64-битном процессе. Однако, когда я установил «Включить 32-разрядные приложения» в False для своего пула приложений, я получаю следующую ошибку при попытке запустить приложение в IE:

не является приложением Win32. (Исключение из HRESULT: 0x800700C1)

Имя приложения в начале сообщения об ошибке отсутствует, т.е. я не потерял его во время копирования и вставки.

Мне посоветовали использовать Process Monitor, чтобы определить, какая загрузка приложения / DLL на самом деле вызывает ошибку, но я не знаю, с чего начать. Может ли кто-нибудь, пожалуйста, посоветовать?

РЕДАКТИРОВАТЬ: Я пробовал фильтровать Process Monitor только для w3wp.exe и только для событий файловой системы и процесса, но при простой попытке перейти к корневому URL-адресу выдается 34 012 событий.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Создайте консольное приложение, созданное только для x64, и используйте его для динамической загрузки всех ссылочных dll по одному с выводом консоли между нагрузками. Когда консольное приложение не может загрузить одну из библиотек DLL, вы узнаете, какая это.

0 голосов
/ 09 марта 2011

Я предполагаю, что это приложение ASP.Net.Вы установили свой основной веб-проект (ы) Platform Target на x86.

Вы можете найти параметр в Project Properties |Построить |Цель платформы

Также есть ли в ваших проектах ссылки на сторонние библиотеки?Если да, знаете ли вы, являются ли они 32-битными или 64-битными dll?

...