1. 问题描述

A程序集引用了 Newtonsoft.Json 6.0程序集
B程序集引用了 Newtonsoft.Json 10.0程序集
此时A引用B,就会报:发现同一依赖程序集的不同版本间存在无法解决的冲突 这一警告,执行程序就会报错–System.IO.FileNotFoundException: 未能加载文件或程序集Newtonsoft.Json xx.x的错误

 A:引用Newtonsoft.Json 6.0FuncA(){var obj= Newtonsoft.Json.Obj;B.FuncB();}B: 引用Newtonsoft.Json 10.0FuncB(){return  Newtonsoft.Json.Obj;}

2. 原因分析

  1. 这是因为依赖顺序引起的。A引用了B,首先会先生成B,而B引用了 Newtonsoft.Json 10.0,那么VS就会将源引用文件(Newtonsoft.Json 10.0)复制到B程序集同一目录(bin/Debug)下,名为Newtonsoft.Json.dll文件,其内嵌程序集版本为10.0。
  2. 然后A引用了B,所以会将B程序集和B程序集的依赖项10.0(Newtonsoft.Json.dll)给复制到A的程序集目录下,而A又引用了Newtonsoft.Json 6.0程序集文件,所以又将6.0的dll文件给复制到自己程序集目录下。因为两个Newtonsoft.Json.dll重名,所以直接覆盖了前者,那么只保留了Newtonsoft.Json 6.0。
  3. 当我们调用Func方法中的B.FuncB()时候,CLR会搜索B程序集,找到后再调用 return Newtonsoft.Json.Obj 这行代码,而这行代码又用到了Newtonsoft.Json程序集,接下来CLR搜索Newtonsoft.Json.dll,文件名称满足,接下来CLR判断其标识,发现版本号是6.0,与B程序集清单里注册的10.0版本不符,故而才会报出异常:未能加载文件或程序集Newtonsoft.Json 10.0。

3 解决方案

以下方案所修改的为程序的配置文件 App.config 或 Web.config文件

方案1. 通过bindingRedirect节点重定向,即当找到10.0的版本时,给定向到6.0版本

<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Newtonsoft.Json"publicKeyToken="30ad4fe6b2a6aeed"culture="neutral" /><bindingRedirect oldVersion="10.0.0.0"newVersion="6.0.0.0" /></dependentAssembly></assemblyBinding>
</runtime>

方案2. 对每个版本指定codeBase路径,然后分别放上不同版本的程序集,这样就可以加载两个相同的程序集

<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Newtonsoft.Json"publicKeyToken="30ad4fe6b2a6aeed"culture="neutral" /><codeBase version="6.0.0.0"href="E:\6.0\Newtonsoft.Json.dll" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Newtonsoft.Json"publicKeyToken="30ad4fe6b2a6aeed"culture="neutral" /><codeBase version="10.0.0.0"href="E:\10.0\Newtonsoft.Json.dll" /></dependentAssembly></assemblyBinding>
</runtime>
END

Newtonsoft.Json版本不一致问题解决相关推荐

  1. .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法

    行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...

  2. [C#] Newtonsoft.Json 版本冲突

    在web.config或者app.config里面加上一段: <runtime><assemblyBinding xmlns="urn:schemas-microsoft- ...

  3. 动态加载Newtonsoft.Json

    /// <summary>     /// 反射调用Newtonsoft.Json.dll,解决Newtonsoft.Json版本不一致报错     /// </summary> ...

  4. 未能加载文件或程序集“Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=

    未能加载文件或程序集"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed& ...

  5. 多个Newtonsoft.Json引起的版本冲突

    指向一个版本,通常是高向低 <runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"& ...

  6. C# 未能加载文件或程序集“ Newtonsoft.Json” Json格式错误

    原因: 版本不一致,所使用的dll和配置文件中的版本不一致. 解决:  (1)查看所使用的Newtonsoft.Json.dll版本 ,然后把对应的版本修改在配置文件中如下,比如版本为"4. ...

  7. Newtonsoft.Json文件错误

    今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原  newtonsoft.Json ...

  8. Newtonsoft.Json 概述

    有时候,在前后台数据交互或者APP与后台交互的时候,我们通常会使用Json进行数据交互,为此会使用到Newtonsoft.Json.dll 这个类库,这个类库非微软官方,但是下载量已经超过了数十万次, ...

  9. Newtonsoft.Json反序列化(Deserialize)出错:Bad JSON escape sequence

    使用Newtonsoft.Json反序列化收到的字串为JObject或其它支持的数据模型,有时错误,提示如下: Bad JSON escape sequence: \c. Path 'idno', l ...

最新文章

  1. 【炫酷秀】仅用4行代码再现《黑客帝国》数字雨,可立即在终端实现!
  2. 26QTimer定时器的使用
  3. C#读取Excel显示到repeater中
  4. 如何判断设备是上电复位还是软复位(主动调用复位接口或者看门狗复位,W600)
  5. 爬了知乎200万数据,图说程序员都喜欢去哪儿工作~
  6. linux ortp 编译,编译oRTP库
  7. 强化学习 ---baseline项目之 TensorFlow的训练参数的存储和加载
  8. Linux:计划任务之at
  9. conda h5py_修改conda安装路径
  10. access无法与wincc链接_step7与s7-300 PLC连接,但是wincc与PLC连接不上怎么办?
  11. 学习记录1——vissim4.3安装和vissim4.3时间修改工具使用
  12. ArcGIS版本更新对比
  13. 计算机网络原理(04741)课后习题答案
  14. 蓝桥杯c语言程序题题库,蓝桥杯c语言试题
  15. 【Python】使用python 画出一张机器猫doraemon
  16. Python的鸭子类型
  17. 计算机3c认证 标准,计算机3C认证怎么办理,检测标准是什么?
  18. 微信公众号:提示“redirect_uri 参数错误”
  19. 私人智库呼吁瑞士国家银行开发瑞士法郎代币,拥抱DLT技术
  20. linux中时间转换date

热门文章

  1. UMD 模块编码模板
  2. DELMIA软件 初始界面的设定
  3. 【大数据】城市公交网络分析与可视化(六):对比分析不同城市公交的“非直线系数”
  4. MATLAB 数据分析
  5. 深度学习双显卡配置_linux(manjaro) tensorflow2.1 conda cuda10 双显卡笔记本深度学习环境搭建...
  6. 人力外派月入4万的操作方法,唤醒你身边沉睡的财富,建议收藏哦
  7. 基于javaweb+jsp的敬老院养老院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
  8. Windows CE 黑客必备工具总结(献给想进入Windows CE平台底层研发的朋友们)
  9. JavaScript:二维码生成与解析
  10. 播放器SkeyeWebPlayer多分屏(九宫格)、拖动(拖入分屏播放)、双击分屏放大缩小等功能的使用