在我的项目中,我使用了两种不同的第三方组件。 我无权访问这些组件的源代码。
每个组件都引用了同一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
关于如何解决问题的任何想法?
答案 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>