Не удалось загрузить файл или сборку 'log4net - PullRequest
6 голосов
/ 20 апреля 2009

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

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

Не удалось загрузить файл или сборку 'log4net, Версия = 1.2.9.0, Культура = нейтральная, PublicKeyToken = b32731d11ce58905' или одна из ее зависимостей. Доступ запрещен.

Вот соответствующие дополнения web.config, которые я использую.

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

<log4net>
    <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="D:\SomeLocation\Errorlog"/>
      <param name="AppendToFile" value="true"/>
      <param name="RollingStyle" value="Size"/>
      <param name="maxSizeRollBackups" value="-1" />
      <param name="maximumFileSize" value="100MB" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="FATAL" />
        <param name="LevelMax" value="FATAL" />
      </filter>
    </appender>
    <appender name="BookingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="D:\SomeLocation\BookingInfoLog"/>
      <param name="AppendToFile" value="true"/>
      <param name="RollingStyle" value="Size"/>
      <param name="maxSizeRollBackups" value="-1" />
      <param name="maximumFileSize" value="100MB" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="FATAL" />
      </filter>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="BookingLogFileAppender"/>
      <appender-ref ref="ErrorLogFileAppender"/>
    </root>

  </log4net>

Он отлично работает на наших локальных машинах и на сервере разработки, но не работает.

Между прочим, кажется, что он выходит из строя после запуска JIT-компилятора на сервере после обновления web.config или перезагрузки пула приложений, или даже через длительный период времени!

ОБНОВЛЕНИЕ: Наши действующие серверы управляют всеми сайтами из общего ресурса. Мне удалось воспроизвести эту проблему на другом сервере, на котором запущено приложение из общего ресурса. При настройке сайта для запуска с локального диска проблема исчезает, но наш хостинг требует, чтобы мы запускались с общего ресурса. Любые идеи, почему у log4net будут проблемы с разрешениями, запущенные из общего ресурса. Снова приложение запускается в первый раз, пока не произойдет другая JIT-компиляция

Ответы [ 4 ]

8 голосов
/ 04 ноября 2011

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

5 голосов
/ 21 апреля 2009

Наверное, спрашиваю об очевидном, но я предполагаю, что log4net.dll в вашей папке bin - правильная версия?

если у вас есть более одного проекта, который ссылается на разные версии одной и той же DLL, более поздний проект нередко копирует DLL поверх предыдущей версии.

Предполагая, что у вас есть более одной копии log4net, нуждающейся в поддержке, лучшее решение, о котором я могу подумать, - это добавить пробную версию в вашу конфигурацию и поместить эту версию в другую папку.

http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

1 голос
/ 21 апреля 2009

Проверьте версию, которую вы связываете во время компиляции (ваша ссылка на файл) и версию, которая используется во время выполнения (сначала посмотрите в GAC, затем локально)

Обычно версия в GAC отличается от версии, которую вы используете в качестве ссылки на файл. Пожалуйста, проверьте это.

Также очистите временный каталог ASP.NET и выполните перезапуск IIS (приглашение cmd -> iisreset)

0 голосов
/ 10 декабря 2011

Бьюсь об заклад, у вашего JIT-компилятора нет прав на запись в общий ресурс. Похоже, что JIT-компилятор перекомпилирует весь сайт время от времени, возможно, когда он будет переработан.

Один из вариантов - развернуть готовый сайт. Таким образом, нет перекомпиляции. Другой вариант заключается в том, что вы предоставляете права на запись в JIT-компилятор для вашей общей папки. Скорее всего, это тот же пользователь, что и ваш веб-сервис, например. Группы SYSTEM, NETWORK SERVICE или LOCAL SERVICE или один из пользователей IIS_ * ...

...