轻尘专栏

博客旨在交流.NET技术、web开发技术、C/S模式开发技术。以实际开发过程中遇到的问题为主,注重.NET技术在真实项目中的实践应用。...

一个项目引用不同版本dll

问题描述

一个项目引用不同版本的同一dll,会引发以下报错:

未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件 

这里来解决项目中同一dll的多版本问题。

解决方式

通过配置web.config配置文件(app.config或web.config)增加配置节点

不同场景有不同的解决方式,下面说明

1. 场景一   以高版本兼容

例如:新旧项目都引用Newtonsoft.Json,但是不同版本。需要以最高版本兼容。 

[html] view plain copy
  1. <runtime>  
  2.   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
  3.     <dependentAssembly>  
  4.       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>  
  5.       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>  
  6.     </dependentAssembly>  
  7.   </assemblyBinding>  
  8. </runtime>  

2. 场景二   同一dll两种版本共存

例如:项目自己引用log4net.dll 版本1.2.13.0 。添加第三方某个dll,第三方依赖log4net.dll版本1.2.9.0,项目中需要两种版本共存。
这里还分两种情况,dll的publicKeyToken相同还是不同 (publicKeyToken查询见说明1)
publicKeyToken相同,配置方法:
[html] view plain copy
  1. <runtime>  
  2.   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
  3.     <dependentAssembly>  
  4.       <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />  
  5.       <codeBase version="1.2.13.0" href="bin\log4netdll\1_2_13\log4net.dll" />  
  6.       <codeBase version="1.2.9.0" href="bin\log4netdll\1_2_9\log4net.dll" />  
  7.     </dependentAssembly>  
  8.   </assemblyBinding>  
  9. </runtime>  

publicKeyToken不同,配置方法:
[html] view plain copy
  1. <runtime>  
  2.   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
  3.     <dependentAssembly>  
  4.       <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />  
  5.       <codeBase version="1.2.13.0" href="bin\log4netdll\1_2_13\log4net.dll" />  
  6.     </dependentAssembly>  
  7.     <dependentAssembly>  
  8.       <assemblyIdentity name="log4net" publicKeyToken="b32731d11ce58905" />  
  9.       <codeBase version="1.2.9.0" href="bin\log4netdll\1_2_9\log4net.dll" />  
  10.     </dependentAssembly>  
  11.   </assemblyBinding>  
  12. </runtime>  

说明

1.publicKeyToken获取方式:使用vs的Tools Command Prompt命令行工具,输入:SN -T "path",例如:

C:\Program Files (x86)\Microsoft Visual Studio 11.0>SN -T "D:\project\liberary\External\log4net.dll"  
  
Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.17929  
版权所有(C) Microsoft Corporation。保留所有权利。  
  
公钥标记为 b32731d11ce58905 

注意:href的路径要保证正确。

参考文献

msdn对配置详解:  点击打开链接

参考文章

http://blog.csdn.net/dang13579/article/details/72956684

阅读更多
个人分类: WinForm C#语言
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

一个项目引用不同版本dll

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭