Как использовать Process Monitor, чтобы определить, какая DLL вызывает исключение BadImageFormatException

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

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

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

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам