错误:无法加载log4net的装配

问题描述:

我期待解决这个错误:当我复制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

尝试将此添加到您的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

有在玩了几个问题,在这里可解析:

  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

有一个工作链接?我正在努力解决这个问题。 – 2013-10-25 19:57:59

我在我的代码有这个问题。有人使用的其中一个项目具有Log4Net版本冲突。他们使用12.2.10,我有12.2.13。所以要解决这个问题,我摆脱了我的参考,并找到他们的参考DLL。我用它来代替,它的工作完美。

查找参考Microsoft Visual Studio具有浏览器功能。你可以使用它来获取DLL。要找到这个DLL,你可以在你的项目中点击你的引用,然后点击你想要查找的引用。在这种情况下,Log4Net。它将显示依赖关系列表,另一个log4net应该靠近选定的Log4Net,并且应该有一些文本显示当前所选dll参考的位置。这是你会找到参考的地方。

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 

对于您的问题,我建议你删除/删除此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