错误:无法加载log4net程序集

时间:2012-07-26 16:02:27

标签: c# asp.net crystal-reports

我希望解决这个错误:

  

无法加载文件或程序集' 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位)。

如何解决此问题?

编辑: 为了回应@Kirvian的回答,我已经对我的web.config文件进行了更改。我仍然得到清单定义与程序集引用不匹配的错误。抛出此错误的代码是:

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

8 个答案:

答案 0 :(得分:5)

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

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

    PublicKeyToken = 692fbea5521e1304 ,processorArchitecture = x86 “&gt;

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

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

    PublicKeyToken = 1b44e1d426115821 ,processorArchitecture = MSIL “&gt;

答案 1 :(得分: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>

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

答案 2 :(得分:0)

我的代码中遇到了这个问题。有人使用的项目之一有Log4Net版本冲突。他们使用12.2.10,我有12.2.13。所以为了解决这个问题,我摆脱了我的参考,并找到了他们的参考dll。我使用了它而且效果很好。

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

答案 3 :(得分:0)

MSDOS

IMyInterface

答案 4 :(得分:0)

对于您的问题,我建议您删除/删除此rellneces中的dll并重新安装,以下是如何在VS 2013上正确安装Log4Net:

1)确保为NuGet Packages Manager实用程序打开nuget.org包源:右键单击Project(不是解决方案),然后选择&#34; Manague NUGet包...&#34;在左下方选择&#34;设置&#34;然后选择&#34;包管理器&#34;然后选择&#34;包来源&#34;在可用包源下选择&#34; nuget.org&#34;同时检查&#34;机器包装来源&#34;点击&#34;确定&#34;

2)你需要管理NUGet包,然后选择&#34; Online&#34;在左侧窗格中,然后搜索&#34; log4net&#34;它从apache log4j移植然后安装它。完成后,您会发现它已安装在项目中的参考文献

我还附上了截图。

享受!

enter image description here

enter image description here

答案 5 :(得分:0)

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

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

步骤如下:

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

答案 6 :(得分:0)

答案 7 :(得分:-5)