Назад | Перейти на главную страницу

IIS сообщает об исключении System.Runtime.Serialization.SerializationException при попытке загрузить dll

Я боролся с IIS последние несколько дней, и ошибка, которую генерирует IIS:

Исключение: System.Runtime.Serialization.SerializationException

Сообщение: не удалось найти сборку «FluentNHibernate, версия = 1.0.0.633, культура = нейтральный, PublicKeyToken = 8aa435e3cb308880».

Что странно, если я проверяю procmon, я могу наблюдать, как процесс IIS находит dll в каталоге, в котором я ожидал, что он найдет ее, а затем он продолжает поиск в других каталогах для той же самой dll. По какой-то причине он также ищет в PDB библиотеку DLL. DLL также существует во временном каталоге, который создает IIS:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ ws-sm \ bc2df7a7 \ 729516d \ assembly \ dl3 \ 42ab9d3b \ 00d491a3_3e6bcd01 \ FluentNHibernate.DLL

Таким образом, он явно смог скопировать dll в рабочее место, но сообщает, что не может ее найти.

Я проверил все свои файлы web.config, и для отладки компиляции во всех случаях установлено значение false, поэтому я удивлен, увидев, что он ищет pdbs.

Поиск в Google этой ошибки не дал ничего полезного.

Я использую Win2k8 x86 с IIS 7, и мой пул приложений интегрирован с ASP.NET v4.0.

Я наконец понял это, и это не было связано с IIS. Отправляю свой ответ на случай, если в будущем кто-то еще столкнется с подобной проблемой.

Моя проблема заключалась в том, что мне не удалось подключиться к одной из моих баз данных, и это привело к возникновению исключения. Каким-то образом (до сих пор не знаю, как) это было поймано одной вещью, а затем поймано IIS, который попытался сериализовать сообщение об ошибке, но не смог найти нужную DLL, поскольку в конечном итоге это было в другом домене приложений. В итоге я нашел эту проблему, подключив windbg к процессу w3wp и наблюдая, как он запускается.

Поэтому, если вы получили эту ошибку, попробуйте подключить windbg к своему процессу и посмотреть, какие ошибки возникают.

Это типичная проблема устранения неполадок .NET.

Пара вещей:

  1. Вы видите SerializationException - это ошибка более высокого уровня. Это не основная причина.
  2. Сообщение, в котором не удалось найти сборку, означает несколько вещей:
    1. У вас либо нет нужного файла в каталоге bin приложения.
    2. Файл в каталоге bin не той версии. (наверняка)
  3. Путь к временному файлу не имеет к этому никакого отношения, это просто временное место, и файл, возможно, уже был скопирован ранее.
  4. База данных PDB или отладочная база данных используется для извлечения символов и другой отладочной информации, чтобы предоставить вам более подробную информацию об ошибке, в любом случае это не требуется и редко развертывается с помощью скомпилированных производственных DLL.

Я определенно хотел бы убедиться, что версия Fluent NHibernate DLL соответствует тому, что программное обеспечение ожидает запустить. Возможно, вам придется связаться с разработчиком / поставщиком, чтобы прояснить проблему. Скорее всего, это не проблема IIS, а проблема приложения.