第三方组件引用同一程序集的不同版本

时间:2014-02-11 10:48:30

标签: c# .net dll log4net assemblyversions

在我的项目中,我使用了两种不同的第三方组件。 我无权访问这些组件的源代码。

每个组件都引用了同一DLL程序集log4net的不同版本。

特别是组件A引用了log4net版本1.2.9.0,而组件B引用了log4net版本1.2.10.0。

在VS2012中,我目前正在向我的项目的引用添加两个第三方组件DLL,我应该添加对log4net的引用。

我尝试了以下内容:

1)添加对log4net 1.2.9.0的引用:代码编译但在运行时我得到异常“无法加载文件或程序集[...] log4net,版本= 1.2.10.0 [...]”

2)添加对log4net 1.2.10.0的引用:代码编译但在运行时我得到异常“无法加载文件或程序集[...] log4net,版本= 1.2.10.0 [...]”

3)将log4net.dll版本1.2.9.0重命名为log4netOld.dll,并将1.2.9.0和1.2.10.0版本添加到项目引用中:在编译期间,我收到预期的警告,告知存在命名空间冲突,并且编译器使用1.2.10.0解析类型,因此在运行时我遇到与第2点相同的问题 - >代码编译,但在运行时我得到异常“无法加载文件或程序集[...] log4net,版本= 1.2.10.0 [...]”

我不是所有Reference属性的专家,我们对所有引用的当前设置是:

1)别名:global

2)copy local:true

3)嵌入互操作类型:false

关于如何解决问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您应该在解决方案中引用1.2.10并在app.config中添加绑定重定向到1.2.9到1.2.10 - 如下所示:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.10.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>