2012-04-29 75 views
8

我试图建立使用LinqToExcel库的项目。另外,我使用log4net来写日志。当我试图加载log4net程序集时抛出错误

我的问题开始当我tryomg运行这段代码行:

var excel = new ExcelQueryFactory(ExcelPath); 
return (from r in excel.Worksheet<RowDetails>(company.Name) 
     select r).Count(); 

此行抛出的异常:

错误MyProj.Program主营:System.IO.FileLoadException:可能不加载 文件或程序集'log4net,版本= 1.2.11.0,文化=中立, PublicKeyToken = 669e0ddf0bb1aa2a'或其依赖项之一。位于程序集清单定义中的 与程序集 的引用不匹配。 (异常来自HRESULT:0x80131040)文件名: 'log4net的, 版本= 1.2.11.0,文化=中性公钥= 669e0ddf0bb1aa2a'

需要注意的是我成功的这条线之前,使用log4net的是非常重要的。

我将不胜感激任何帮助。

非常感谢!

+2

看起来好像您正在加载不同版本的log4net程序集。难道你的文件系统中有几个log4net.dll,而错误的文件会被加载? – 2012-04-29 14:49:55

+0

我有这个相同的问题;该签名匹配我的部署项目中,DLL部署在我的程序集相同的目录中,但我得到这个错误。反正第一部分。 – 2012-05-02 15:35:31

+0

1.2.11+有两种口味,“旧钥匙”和“新钥匙”,你似乎需要新的关键口味...... – 2012-09-24 21:14:04

回答

6

正如marc_s指出的那样,当试图加载相同程序集的不同版本时,通常会出现此问题。确保您的项目使用与LinqToExcel库相同的程序集版本,该库也依赖于log4net。另外任何其他库应该使用相同的程序集版本。为了解决这个问题,你也可以尝试使用装配在你的app.config重定向,像这样:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> 
     <bindingRedirect oldVersion="1.2.10.0" newVersion="1.2.11.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
6

尝试使用的NuGet

Install-Package log4net -Version 2.0.0 

2.0.0版是log4net的1.2进行安装。 11

1

我有类似的问题。我认为问题出在LinqtoExcel引用Log4Net版本1.2.11,并且您引用了Log4Net sepratly并且您获得了最新的1.2.13版本。在构建输出时,你最终会得到1.2.13,当LintoExcel调用Log4Net时,它期望1.2.11和错误。

0

在通过NuGet升级log4net后,我得到了这个问题,只是发现新版本使用不同的密钥签名。

您可以从the apache log4net site获取'oldkey'版本,然后它对我有用。

相关问题