2012-04-29 40 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'版本,然後它對我有用。

相關問題