无法加载文件或程序集'log4net

She*_*eff 6 .net c# log4net web-config

好吧,在将我们的一个Web应用程序部署到我们的实时服务器时,我遇到了一个非常奇怪的问题.

我们的应用程序使用log4net来记录大量的操作,在部署后的几个小时后,我们得到以下异常.

无法加载文件或程序集'log4net,Version = 1.2.9.0,Culture = neutral,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>
Run Code Online (Sandbox Code Playgroud)

它在我们的本地计算机和开发服务器上工作正常但不在现场.

顺便说一下,在web.config更新或应用程序池回收之后,JIT编译器在服务器上运行后,或者甚至很长一段时间后,它似乎都会中断!

更新:我们的实时服务器从共享位置运行所有网站.我设法在另一台运行该应用程序的服务器上复制此问题.将网站设置为从本地驱动器运行时,问题就会消失,但我们的托管要求我们从共享运行.任何想法为什么log4net将从共享运行权限问题.应用程序再次运行,直到另一个JIT编译发生

Mat*_*lee 8

当我们迁移到VS 2010和.NET 4.0时,我们也遇到了这个问题,我们根本不使用log4net,但我怀疑我们使用了其他东西(也许是Crystal Reports?)而且我也怀疑我们使用的是dll是一个32位的DLL也是因为当我将IIS中应用程序池的高级设置下的"启用32位应用程序"选项更改为"True"时,一切都再次起作用.


Mar*_*rst 5

请问显而易见,但我假设您的bin文件夹中的log4net.dll是正确的版本?

如果您有多个项目引用同一DLL的不同版本,则后一个项目将DLL复制到先前版本并不罕见.

假设您需要支持多个log4net副本,我能想到的最佳解决方案是将探测添加到您的配置并将此版本放在另一个文件夹中.

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


Pat*_*ers 1

检查您在编译时绑定的版本(您的文件引用)和运行时使用的版本(首先在 GAC 中查看,然后在本地查看)

通常,GAC 中的版本与您作为文件参考的版本不同。请检查一下。

同时清理 ASP.NET 临时目录并执行 IIS 重新启动(cmd 提示符 -> iisreset)