3

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

每个组件都引用同一个 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 [ ...]”

我不是所有参考属性的专家,我们当前对所有参考的设置是:

1) 别名:全局

2)复制本地:真

3) 嵌入互操作类型:false

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

4

1 回答 1

2

您应该在解决方案中引用 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>
于 2014-02-11T11:00:52.583 回答