newtonsoft.json.dll版本不一致解决办法

https://wenku.baidu.com/view/cb6216a8cf22bcd126fff705cc17552707225efe.html?_wkts_=1670760863508&bdQuery=newtonsoft.json.dll%E5%8D%B8%E8%BD%BD%E4%B8%8D%E4%BA%86

 

第一种方法:

第一种方法解决了部分问题,后来发现有个项目,明明引用了最新的dll,可是每次生成,都会生成旧版本的,查了很久,发现是由于项目依赖造成的,依赖的项目是老版本的,所以会复制一份老版本的dll。

文章链接:https://blog.csdn.net/wang__wei/article/details/121033738

文章内容:

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

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

 

posted @ 2022-12-11 20:17  yinghualeihenmei  阅读(959)  评论(0编辑  收藏  举报