记一次动态库版本冲突

背景:

  项目为asp.net mvc项目,使用的是.net framework 4.0。

起因:

  由于项目要加入消息推送,因此引入极光推送,在项目内加入cn.jpush.api.dll。

问题:

  消息推送代码加入之后,编译通过,运行时报错【无法找到Newtonsoft.Json.dll 9.0.0】。

  此时项目内已经在使用Newtonsoft.Json.dll v4.5.0版本。

解决方法:

  1.于是尝试删除Newtonsoft.Json.dll v4.5.0版本的引用,加入Newtonsoft.Json.dll 9.0.0版本引用。

  并且修改nuget的package.config中关于Newtonsoft.Json.dll的版本信息(nuget的文档参考:https://docs.microsoft.com/en-us/nuget/)。

  这时候,消息推送代码可以运行了

  2.但是问题没有解决,系统启动的时候,报错。

  原来自定义的AreaRegistration的RegisterArea方法里面,执行GlobalConfiguration.Configuration.Routes.MapHttpRoute报错,找不到Newtonsoft.Json.dll v4.5.0版本。

  .net framework默认使用的是Newtonsoft.Json.dll v4.5.0版本,按照vs编译提示,在Web.config内加入强制版本信息后,问题解决。

  在runtime节点加入如下信息,问题解决:

1 <assemblyBinding>
2     <dependentAssembly>
3     <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
4 <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
5     </dependentAssembly>
6 </assemblyBinding>        
View Code
原文地址:https://www.cnblogs.com/zhuzhu_/p/7909485.html