繁体   English   中英

错误:无法加载 log4net 程序集

[英]Error: Could not load log4net assembly

我正在寻求解决此错误:

无法加载文件或程序集“log4net,版本=1.2.10.0,文化=中性,PublicKeyToken=692fbea5521e1304”或其依赖项之一。 系统找不到指定的文件。”此错误位于 web.config 文件中。

当我将 log4net.dll 复制到我的 webapp 的 bin 目录时,我得到一个

无法加载文件或程序集“log4net,版本=1.2.10.0,文化=中性,PublicKeyToken=692fbea5521e1304”或其依赖项之一。 定位的程序集的清单定义与程序集引用不匹配。

此错误也发生在 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" />

这里有几个可以解决的问题:

  1. 32 位版本的 log4net.dll 的公钥令牌与 Crystal Reports 使用的公钥令牌冲突 要验证您是否有此问题,请在所有 .csproj 文件中搜索“ 692fbea5521e1304 ” - 如果您看到对 CrystalDecisionslog4net 的引用,则您有此问题。
  2. 32 位版本的 log4net.dll 与为 64 位或 AnyCPU 架构编译的 dll 发生冲突 如果您遇到此问题,您会找到如下所示的参考资料。 您可以通过将应用程序池重新配置为 32 位运行并检查应用程序是否运行来验证问题 - 如果运行,则您遇到了此问题。
 <Reference Include="log4net, Version=1.2.10.0, Culture=neutral,

PublicKeyToken= 692fbea5521e1304 , 处理器架构= x86 " >

在 64 位中对我们有用的修复是获取最新的 log4net.dll,它实际上有一个新的 PublicKeyToken,替换第 3 方 bin 文件夹中的 log4net.dll 并将所有 log4net.dll 引用更改为如下所示:

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

PublicKeyToken= 1b44e1d426115821 , 处理器架构= MSIL ">

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

您需要将1.2.10.0替换为您在 bin 文件夹中实际拥有的版本。

如果您的机器是 64 位并且您安装的是 Crystal Report 32 位版本,那么此错误会像任何事情一样困扰您。 在这种情况下,所有必需的程序集都已在 GAC 中正确注册,但仍然显示“无法加载 log4net 程序集...”此错误的原因是您正在尝试在 64 位计算机上执行 32 位应用程序。

如果您在服务器端实现报告,IIS 将不允许执行此应用程序。 要解决此问题,您必须在 IIS 中启用 32 位应用程序。

这样做的步骤是:

  1. 转到运行应用程序的应用程序池
  2. 右键单击并转到高级设置
  3. 在这里找到“启用 32 位应用程序”并将其设置为 true
  4. 重置 IIS (iisreset)

我的代码中有这个问题。 有人使用的项目之一存在 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 并重新安装,以下是在 VS 2013 上正确安装 Log4Net 的方法:

1)确保通过以下方式打开 NuGet 包管理器实用程序的 nuget.org 包源:右键单击项目(不是解决方案),然后选择左下角的“Manague NUGet 包...”选择“设置”,然后选择“包管理器”在可用包源下选择“包源”选择“nuget.org”同时选中“Machine-wid包源”单击“确定”

2) 它将带您到管理 NUGet 包,然后在左窗格中选择“在线”,然后搜索“log4net”,它是从 apache log4j 移植的,然后安装它。 完成后,您会发现它安装在项目的 References 下

我还附上了截图。

请享用!

在此处输入图片说明

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM