2012-07-26 176 views
12

我期待解決這個錯誤:當我複製log4net.dll我的web應用程序的bin目錄錯誤:無法加載log4net的裝配

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified." This error is located in the web.config file.

,我得到一個

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

這web.config文件中也會出現錯誤。

很容易更改版本和公鑰標記以匹配文件,以便程序集正確加載。當我這樣做時,我的網站完美運行,除了初始化reportViewer對象時。然後它會在reportViewer標記處引發原始錯誤,而不是web.config。

我的假設是,如果我安裝log4net.dll的請求版本,我的問題將得到解決。但我不知道哪個文件或哪裏可以找到它。我已經通過下載log4net 1.2.10檢查了明顯的情況,並嘗試了下載中的每個dll。

我應該提到網站在我的開發機器上運行時沒有問題,但是在發佈到我的服務器時沒有問題。

我在Server 2008 R2操作系統上運行一個asp.net網站,.NET 4.0,IIS 7。我已經爲64位安裝了Crystal Reports 13.0.1(我的機器是64位)。

我該如何解決這個問題?

編輯: 回覆@ Kevian的回答,我已經改變了我的web.config文件。清單定義與程序集引用不匹配時,仍然出現錯誤。引發此錯誤的代碼是:

Line 33:  <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" 
Line 34:   BestFitPage="True" ToolPanelView="None" /> 
+0

是一個解決方案發現了什麼? – tomfanning 2013-01-28 14:57:05

回答

1

嘗試將此添加到您的web.config中。它主要是告訴運行時,你是好它加載相同的程序集兩個版本

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

你需要與你實際上在你的bin文件夾中的版本替換1.2.10.0

+0

看起來好像會起作用,但它似乎並未重定向所有程序集引用。 – Brynne 2012-07-26 18:48:51

+0

@notkilroy你能解釋一下嗎?你是什​​麼意思,它不重定向所有引用?你能給我更新錯誤信息嗎? – 2012-07-27 16:56:05

+0

這是一個無法加載文件或程序集log4net。定位的程序集清單定義與程序集引用不匹配。 但是,現在指向單個頁面中的一行,而不是指向我的web.config中的代碼的錯誤。該行是:「」 – Brynne 2012-07-27 19:23:31

4

有在玩了幾個問題,在這裏可解析:

  1. 爲log4net.dll衝突與Crystal Reports中使用的一個32位版本的公鑰標記。爲了驗證是否有此問題,請在所有文件的.csproj的「692fbea5521e1304」搜索 - 如果你看到CrystalDecisions log4net的,你有這個問題的引用。
  2. 32位版本的log4net.dll與針對64位或AnyCPU架構編譯的dll發生衝突。如果你有這個問題,你會發現下面的引用。您可以通過重新配置應用程序池以32位運行並檢查應用程序是否運行來驗證問題 - 如果它運行,則會出現此問題。
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, 

PublicKeyToken=692fbea5521e1304, processorArchitecture=x86" >

,在64位工作對我們來說,修復是爲了獲得最新的log4net的。這實際上有一個新的公鑰的dll,更換log4net.dll在第三方bin文件夾,改變所有log4net.dll引用看起來像這樣:

<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, 

PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">

0

我在我的代碼有這個問題。有人使用的其中一個項目具有Log4Net版本衝突。他們使用12.2.10,我有12.2.13。所以要解決這個問題,我擺脫了我的參考,並找到他們的參考DLL。我用它來代替,它的工作完美。

查找參考Microsoft Visual Studio具有瀏覽器功能。你可以使用它來獲取DLL。要找到這個DLL,你可以在你的項目中點擊你的引用,然後點擊你想要查找的引用。在這種情況下,Log4Net。它將顯示依賴關係列表,另一個log4net應該靠近選定的Log4Net,並且應該有一些文本顯示當前所選dll參考的位置。這是你會找到參考的地方。

0

MSDOS

-- Create a virtual disk 
subst t: C:\Windows\assembly 

-- Delete log4net x64 assembly 
del t:\GAC_64\log4net\1.2.10.0__692fbea5521e1304\log4net.dll 

-- remove the virtual disk 
subst t: /d 
0

對於您的問題,我建議你刪除/刪除此DLL在refereneces並重新安裝,這裏是如何正確地對VS 2013安裝log4net的:

1)確保你打開在你的nuget.org NuGet包管理器實用程序的包源代碼:右鍵項目(非解決方案),然後選擇「Manague NUGet Packages ...」在左下角選擇「設置」,然後選擇「包管理器」,然後選擇「包源代碼」可用的軟件包源選擇「nuget.org」也檢查「Machine-wid軟件包源」點擊「確定」

2)它會帶你去管理NUGet軟件包,然後在左邊窗格中選擇「在線」,然後搜索「log4net」它將從apache log4j移植,然後安裝它。完成後你會發現它安裝在你項目的參考文獻中

我也附上截圖。

享受!

enter image description here

enter image description here

相關問題