无法加载文件或程序集"log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"。

18

我使用NuGet包管理器在我的项目中添加了Log4Net,它显示已安装版本2.3。

以下是我的配置条目:

  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

然后在这里引用此文件

  <log4net configSource="Log4Net.config" />
  <system.serviceModel>
当我运行网站时,出现以下异常信息:

无法加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或其中的一个依赖项。找到的程序集清单定义与 程序集引用不匹配。(HRESULT 异常:0x80131040)

描述:当前 Web 请求的执行期间发生未经处理的异常。请检查堆栈跟踪以获取有关错误的更多信息以及代码中的起源位置。

异常详细信息:System.IO.FileLoadException: 无法加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或其中的一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

源错误:

在当前 Web 请求的执行期间生成了一个未处理的异常。可以使用下面的异常堆栈跟踪标识异常的起源和位置信息。

我已经看到dll文件存在于bin文件夹中,但显示的版本是1.2.13.0。
如何更改程序集版本?
1个回答

18
似乎你的解决方案中的一个项目或者一些第三方dll使用了不同版本的log4net。要么更新所有项目中的log4net引用(对于第三方dll这并不起作用),要么可以在web.config(app.config)中添加程序集重定向设置,将指定版本/版本的log4net重定向到新版本。
将此部分放入您的web.config(app.config)中,放在configuration元素下的任何位置。
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="log4net"
                          publicKeyToken="1b44e1d426115821"
                          culture="neutral" />
            <bindingRedirect oldVersion="1.2.10.0"
                         newVersion="1.2.13.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

查看MSDN文档页以获取更多信息。


那似乎是正确的答案,但我通过将我的 Log4Net 降级到 1.2.10.0 版本来解决了问题,一切都正常工作。现在我不能这样做了,因为我已经将补丁发布到生产环境中。我仍然会标记你的答案以供将来参考(给其他人)。 - Naveed Butt
注意 - 永远通过进入包管理器来更改/升级/降级任何NuGet包的版本。这样,NuGet就能够在必要时进行必要的更改,包括项目系统。我曾经直接修改packages.config文件,结果付出了整整一天的代价。 - RBT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接