В указанном модуле не удалось найти ошибку на виртуальной машине, на которой размещен веб-сайт. - PullRequest
3 голосов
/ 01 февраля 2011

Я имел дело со странной ситуацией с виртуальной машиной Windows Server 2003, на которой работает веб-сайт ASP.NET 3.5 ... Или, по крайней мере, пытаюсь запустить ее.

Веб-сайт былустанавливается с использованием стандартного установщика для проекта, который использовался для установки в нескольких разных местах.Тем не менее, этот ведет себя по-другому.

Веб-сайт не работает, когда он работает.В средстве просмотра событий сообщается о следующей ошибке:

Информация об исключении: Тип исключения: HttpException Сообщение об исключении: Указанный модуль не найден.(Исключение из HRESULT: 0x8007007E)

Об ошибке сообщается на веб-сайте как:

Сведения об исключении: System.IO.FileNotFoundException: указанный модуль не найден,(Исключение из HRESULT: 0x8007007E)

Запустив программу просмотра журнала Fusion, я вижу, что ASP.NET пытается загрузить следующие сборки:

CppCodeProvider, Version =8.0.0.0, Культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a VJSharpCodeProvider, Версия = 2.0.0.0, Культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a

Во-первых, нет причин, по которым ASP.NET должен загружать этисборок.Я не могу найти нигде в machine.config или любой другой конфигурации, где эти сборки перечислены как требуется.Мы попытались установить 3.5 SDK, но ни один из них не был установлен.У меня только 10 версия CPPCodeProvider на моей машине для разработки.

Какого черта здесь происходит ??

NB: Пожалуйста, не выполняйте краткий поиск и ответ в Google.Ничто, что я нашел, не относится.И если кто-нибудь ответит

«Определить константу отладки» и «Определить константу TRACE»

Я собираюсь пробить вас через промежутки.

1 Ответ

4 голосов
/ 03 февраля 2011

Проклятая красная сельдь.

Оказывается, у меня была зависимость, которая зависела от msvc71.dll.Поскольку моя виртуальная машина не имела этой DLL, загрузка зависимости не удалась.Однако из-за дрянных сообщений об исключениях в коде (и, честно говоря, этой части платформы) эта ошибка выглядела как

Указанный модуль не найден.(Исключение из HRESULT: 0x8007007E)

Мой первый инстинкт, когда я вижу что-то подобное, - это ускорение fuslogvw.Теперь, когда я включил Fusion Logging, он говорил мне, что CppCodeProvider и VJSharpCodeProvider не могут быть найдены.Итак, я подумал, что это было причиной ошибки.QED.

ОНИ НЕ БЫЛИ. Тот факт, что Fusion не смог найти их, абсолютно не влияет на работу веб-сайта ASP.NET. Знай это хорошо, интернет-искатели!Это красная сельдь!

Я понял это, когда сделал то, что я должен был сделать с самого начала - я сбросил Process Monitor на сервере, установите фильтр, чтобы наблюдать за процессом w3wp за попытками загрузки DLL, и ждал, пока ФАЙЛ НЕ НАЙДЕН.

Я нашел копию msvc71.dll на моем компьютере разработчика (у Sql Server она была) и уронил ее в систему виртуального ящика32.Все, что мне нужно было сделать, - это разрешить сетевой службе разрешение на чтение и выполнение для DLL, и все снова заработало.

...