2011-01-10 127 views
12

我被要求看看ASP/C#應用程序中的一個錯誤與貝寶集成。誤差,完全示出,爲:無法加載文件或程序集log4net或它的一個依賴

無法加載文件或組件 'log4net的,版本= 1.2.0.30714, 文化=中性 公鑰= b32731d11ce58905' 其依賴的或 之一。位於 程序集清單定義 與程序集引用不匹配。 (異常來自HRESULT:0x80131040)

據我所知,這意味着位於實際的文件(也就是,在我的bin目錄log4net.dll)不匹配基於一些組合配置預計的版本。我遇到的問題是我無法找到該文件被引用的位置。

我可以訪問所有文件在網站的Web根目錄下,並不能找到引用此DLL的任何配置文件。我還需要考慮哪些方面來確定造成錯配的原因?

作爲一個說明,我確信,在bin目錄中的DLL的版本是最新的,但是這似乎並沒有已經解決任何事情。

回答

9

你需要控制在項目引用內容以及 - 引用被編譯成彙編本身並嘗試加載。我的猜測是,您有一個過時的log4net程序集引用,但正在使用最新版本。

+0

這很有道理。有沒有辦法讓我看看在項目中做了哪些引用 - 查看編譯後的項目時通常會找到哪個文件? – Elie 2011-01-10 01:12:55

+0

您不應該看編譯的項目,而是未編譯的項目 - csproj文件。否則,我認爲depend.exe(在Mark的帖子中)會有所幫助。 – Femaref 2011-01-10 01:32:05

+0

這也可以在nuget包中驗證。如果其中一個項目引用了log4net 1.2.3版。4和其他項目尋找log4net版本5.6.7.8,那麼你會得到這個錯誤。 (或任何其他nuget包)。只要匹配這些版本,你就可以走了。 – Krishna 2017-07-13 22:51:41

1

我沒有任何有關特定錯誤的有用信息。但是,如果您沒有使用它們,有幾個有用的實用程序可幫助解決此類問題:Dependency Walker.NET Reflector

的依賴性檢查器可用於查看是否存在由log4net的組件中使用意想不到模塊。 Reflector實用程序顯示有關程序集的各種有用信息(包括版本,引用程序集,更不用說反彙編代碼)。

2

你可能擁有最新版本的log4net的,但所具有的選擇引用舊的項目。您可以強制所有組件引用舊版本使用<bindingRedirect>

您可以找到有關他們在這裏更多信息以參考新版本:http://msdn.microsoft.com/en-us/library/eftw1fys.aspx

如果你不知道具體的版本重定向,你可以也使用一系列版本並將它們全部指向您的特定版本。

1

我也遇到了這個問題,它發生的原因是項目,由於某種原因,從GAC拉log4net,所以很可能GAC中的版本與引用的版本不匹配在您的項目

14

我們也有這個問題的時候,我們搬到了VS 2010和.NET 4.0中,我們不使用log4net的所有,但我懷疑別的東西,我們使用它(也許水晶報表?),我也懷疑有一個我們使用的DLL也是一個32位的DLL,因爲當我將IIS中的應用程序池的高級設置下的「啓用32位應用程序」選項更改爲「True」時,所有工作都會重新開始。

4

我們的網絡應用程序有類似的問題。我們從古老的.NET 1.1 32位升級到.NET 4.0 64位。

我在我們的我們的用戶控件的一個接收錯誤是如下:

ASP.NET runtime error: Could not load file or assembly 'log4net' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

在這裏,我的猜測是,我們在編寫64位DLL中,但其引用一個32位DLL ?我同意Matt Palmerlee上面所說的 - 將應用程序池切換到32位模式確定問題,但仍然卡在32位應用程序池中。我們想要利用額外的64位內存將提供我們的IIS應用程序池。

最終,我無法確定哪個第三方DLL實際上引用了log4net。我建立後注意到,雖然log4net.dll被複制到我的「bin」目錄,我右鍵單擊它,並找出它與Apache基金會有關 - http://logging.apache.org/log4net/

我結束了剛剛下載最新的log4net.dll對於.NET 4,將其添加爲我的Web應用程序項目的引用,重新編譯,然後重新打開用戶控件,錯誤消失。

log4net download

希望這有助於

0

我要跟着馬特的建議啓用IIS的應用程序池設置32位應用程序。

原來我甚至都不需要那麼遠,只要我從卡西尼切換到IIS,錯誤就解決了。

要切換到IIS:

  1. 啓用IIS在Windows程序和功能(請務必也使 「ASP.NET XX」 下的IIS節點>萬維網服務>應用程序開發功能)
  2. 在項目屬性> Web>使用本地IIS Web服務器>創建虛擬目錄(必須以管理員身份運行VS來執行此操作)。
  3. 構建項目>在此之後運行

沒有log4net的錯誤。

我不知道爲什麼我得到它,因爲我什至不使用log4net,但我很高興它消失了。

2

同樣的錯誤在這裏,這裏是我們如何修復:從Apache下載最新的.Net 4.0 log4net.dll,並替換bin文件夾中的版本爲我工作。您應該添加對您的項目的引用以使其永久。這裏是鏈接:Apache

轉到下載,二進制文件,然後選擇新的密鑰版本。下載完成後,導航到.Net 4.0文件夾以查找.dll文件。

0

閱讀這些答案後,我結束了檢查.csproj並找到實際參考'Lib \ log4net.dll'的部分。我刪除了這個項目並編譯。

相關問題