16

我正在寻找解决这个错误:

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

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

无法加载文件或程序集 'log4net, Version=1.2.10.0, Culture=neutral, 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" />
4

7 回答 7

6

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

  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 位中对我们有用的修复是获取实际上具有新 PublicKeyToken 的最新 log4net.dll,替换您的 3rd 方 bin 文件夹中的 log4net.dll 并将所有 log4net.dll 引用更改为如下所示:

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

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

于 2013-02-02T01:32:34.540 回答
2

尝试将此添加到您的 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 文件夹中实际拥有的版本。

于 2012-07-26T16:45:06.193 回答
1

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

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

为此的步骤是:

  1. 转到运行应用程序的应用程序池
  2. 右键单击并转到高级设置
  3. 在这里找到“启用 32 位应用程序”并将其设置为 true
  4. 重置 IIS (iisreset)
于 2019-05-27T03:59:36.097 回答
0

对于您的问题,我建议您在参考文献中删除/删除此 dll 并重新安装,这是在 VS 2013 上正确安装 Log4Net 的方法:

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

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

我还附上了截图。

请享用!

在此处输入图像描述

在此处输入图像描述

于 2017-10-20T18:10:32.030 回答
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
于 2016-03-31T10:13:50.803 回答
0

我下载了这个x86版本,问题解决了

https://downloads.i-theses.com/index.php?option=com_downloads&task=downloads&groupid=9&id=100

于 2021-02-15T11:33:01.513 回答
0

我的代码中有这个问题。有人使用的其中一个项目存在 Log4Net 版本冲突。他们使用的是 12.2.10,而我使用的是 12.2.13。所以为了解决这个问题,我摆脱了我的参考并找到了他们的参考 dll。我改用它,它工作得很好。

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

于 2015-11-10T16:35:19.033 回答