Не удалось загрузить файл или сборку log4net или один из его зависимостей

меня попросили взглянуть на ошибку в приложении ASP/C# с его интеграцией Paypal. Ошибка, показанная полностью:

не удалось загрузить файл или сборку 'такой как log4net, версия=1.2.0.30714, Культура=нейтральный, PublicKeyToken=b32731d11ce58905 ' или одна из его зависимостей. В расположенном определение манифеста сборки не не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

насколько я понимаю, это означает, что фактический файл находится (то есть log4net.dll в моем каталоге bin) не соответствует версии, ожидаемой на основе некоторой конфигурации сборки. Проблема в том, что я не могу найти, где этот файл ссылается.

У меня есть доступ ко всем файлам в корневом каталоге веб-сайта и я не могу найти файлы конфигурации, ссылающиеся на эту DLL. Где еще мне нужно искать, чтобы определить, что вызывает несоответствие?

в качестве примечания, я сделал конечно, версия DLL в каталоге bin обновлена, но это, похоже, ничего не решило.

9 ответов


вам также нужно контролировать ссылки в проектах - ссылки компилируются в саму сборку и будут пытаться загрузить. Я предполагаю, что у вас есть устаревшая ссылка на сборку log4net, но вы используете последнюю версию.


У нас была эта проблема также, Когда мы переехали в VS 2010 и .NET 4.0, мы вообще не используем log4net, но я подозреваю, что что-то еще мы используем (возможно, Crystal Reports?) и я также подозреваю, что есть dll, которую мы используем, это 32-разрядная dll, потому что, когда я изменяю параметр "включить 32-разрядные приложения" в расширенных настройках пула приложений в IIS на "True", все снова сработало.


у нас была аналогичная проблема с нашим веб-приложением. Мы перешли от древнего .NET 1.1 32-битного к .NET 4.0 64-битному.

ошибка, которую я получал в нашем одном из наших пользовательских элементов управления, была следующей:

ASP.NET runtime error: Could not load file or assembly 'log4net' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Я предполагаю, что мы компилируем DLL в 64-разрядной версии, но ссылаемся на 32-разрядную dll? Я бы согласился с тем, что сказал Мэтт Палмерли выше - переключение пула приложений в 32-разрядный режим устраняет проблему, но вы все еще застряли в 32-разрядном пуле приложений. Мы хотели воспользоваться дополнительной памятью, которую 64-бит предложит нашим пулам приложений IIS.

в конечном счете, я не смог выяснить, какая из сторонних библиотек DLL фактически ссылалась на log4net. Я заметил после создания, хотя, что log4net.dll была скопирована в мой каталог "bin", и я щелкнул по нему правой кнопкой мыши и понял, что это связано с Apache Foundation -http://logging.apache.org/log4net/

Я закончил просто загрузив последнюю версию такой как log4net.dll для .NET 4, добавил его в качестве ссылки на мой проект веб-приложения, перекомпилировал, а затем снова открыл пользовательский элемент управления и ошибка исчезла.

скачать такой как log4net

надеюсь, что это помогает


у вас, вероятно,есть последняя версия log4net, но есть проект, ссылающийся на старый. Вы можете заставить все сборки, ссылающиеся на старую версию, ссылаться на новую версию с помощью <bindingRedirect>

вы можете найти более подробную информацию о них здесь: http://msdn.microsoft.com/en-us/library/eftw1fys.aspx

Если вы не знаете конкретную версию для перенаправления, вы также можете использовать ряд версий и указать их все на свой конкретный версия.


та же ошибка здесь, вот как мы исправили: загрузка последней версии .Net 4.0 log4net.dll от Apache и замена версии в папке bin работали для меня. Вы должны добавить ссылку на свой проект, чтобы сделать его постоянным. Вот ссылка: Apache

перейдите в раздел Загрузки, двоичные файлы и выберите новую версию ключа. После загрузки перейдите в папку .Net 4.0, чтобы найти .DLL-файл.


У меня нет никакой полезной информации о конкретной ошибке. Однако, в случае, если вы не использовали их несколько полезных утилит, чтобы помочь с этим типом проблемы являются Зависимость Walker и .NET рефлектор.

средство проверки зависимостей можно использовать для проверки наличия неожиданных модулей, используемых сборкой log4net. И утилиты рефлектор показывает все виды полезной информации о сборках (включая версии, сборки, не говоря уже про дизассемблированного кода).


Я также столкнулся с этой проблемой, и причина, по которой это происходило, заключалась в том, что проект по какой-то причине вытаскивал log4net из GAC, поэтому вполне возможно, что версия в GAC не соответствует версии, указанной в вашем проекте


Я собирался последовать совету Мэтта, чтобы включить 32-разрядные приложения в настройках пула приложений IIS.

оказывается, мне даже не нужно было заходить так далеко, ошибка разрешилась, как только я переключился на IIS от Cassini.

для переключения на IIS:

  1. включить IIS в программах и функциях Windows (обязательно включите "ASP.NET X. узел " x " в разделе IIS > World Wide Web Services > функции разработки приложений)
  2. в проект Свойства > веб > использовать локальный веб-сервер IIS > создать виртуальный каталог (для этого необходимо запустить VS as Admin).
  3. создать проект > выполнить

нет ошибки log4net для меня после этого.

Я не знаю, почему я получил его, потому что я даже не использую log4net нигде, но я рад, что он ушел.


после прочтения этих ответов я закончил проверку .csproj и поиск фактической ссылки на ' Lib\log4net.файлов в разделе. Я удалил это и проект скомпилирован.