Как использовать 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?