问题 无法加载文件或程序集log4net


我已经添加了 log4net 到我的项目,它在我的机器上工作正常,但当我将我的应用程序的发布版本发送给我的同事时,他收到了这个 FileNotFoundException

无法加载文件或程序集'log4net,Version = 1.2.13.0,   Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a'

但奇怪的是,在我的 app.config 我甚至没有使用上面的log4net版本:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="BizWizard.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>

7963
2017-10-27 09:28


起源

看着 stackoverflow.com/questions/8743992/... 可能这就是你需要的东西。 - csprabala
@csprabala我正在尝试修复。但为什么它在我的机器上正常工作? - Disasterkid
我知道这听起来很愚蠢,但您是否已将log4net DLL与您的应用程序一起发送给您的同事? - Bernd Linde
@BerndLinde是的,log4net.dll和log4net.xml都包含在该文件夹中。 - Disasterkid
两个系统都是64位? (参考 这里) - Bernd Linde


答案:


你使用其他第三方图书馆吗?也许其中一个需要这个特定版本的log4net。如果是这种情况,可以使用应用程序app.config文件中的程序集绑定来解决此问题。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
      <codeBase version="1.2.13.0" href="log4netv1.2.13.0\log4net.dll" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

并将1.2.13.0版本的log4net放在名为log4netv1.2.13.0的子文件夹中

您还可以尝试使用bindingRedirect将对log4net的所有引用重定向到特定(您的)版本。 http://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx


7
2017-10-27 10:13



我刚刚降级到log4net 1.2.0,它开始工作了。由于我不会在将来寻找问题,我想我现在要坚持这个。 - Disasterkid
放一些文件夹,重定向......你在说什么?多年来都使用nuget包!他们你不能简单地将库放在你想要的文件夹中并解决问题! - Artem G


陷入同样的​​问题。 LinqToExcel库使用的是不同版本的log4net。

解决它:

  • 删除参考中的旧log4net版本。

  • 转到工具,Nuget包管理器,包管理器控制台。

  • 跑:

安装包log4net -Version 2.0.3

更多细节在这里:

https://www.nuget.org/packages/log4net/2.0.3


2
2018-01-25 16:51