为什么Newtonsoft.Json容易出现汇编版本冲突?

时间:2017-06-20 10:38:09

标签: c# json.net

我注意到我们经常在项目中遇到程序集版本冲突,90%的时候它是Newtonsoft.Json的底部。对于Newtonsoft.Json冲突有很多问题 - 臭名昭着的"无法加载文件或程序集' Newtonsoft.Json,Version = 6.0.0.0"例如。搜索"assembly 'Newtonsoft.Json, Version=6.0.0.0"会提出37个问题 - 其中很多都是高度赞成的。或this one about 4.5.0.0

有没有任何解释为什么这种情况经常发生在该库而不是其他库中,为什么它是如此一致的汇编版本冲突源?它肯定比其他库更频繁地发生。

1 个答案:

答案 0 :(得分:10)

  

为什么Newtonsoft.Json容易出现汇编版本冲突?

基本上,因为它通常被其他库应用程序代码用作下游依赖项。如果你有包$scope.updateOwner(在这种情况下,Netwonsoft.Json),你有:

A
然后一切都很棒;但如果你有:

SomeApp
-> A

或:

SomeApp
-> A
-> SomeLib
   -> A

或:

SomeApp
-> SomeLib
   -> A
-> SomeOtherLib
   -> A

或:

SomeApp
-> A
-> SomeLib
   -> A
-> SomeOtherLib
   -> A

然后SomeApp -> A -> SomeLib -> A -> SomeOtherLib -> YetAnotherLib -> A -> MeTooLib -> A 的所有引用版本都必须相同的需要适当的程序集绑定重定向以允许lib预期版本7默默接受版本10而不会引发绑定问题。当然,如果API在旧库使用的方法中在版本7和10之间不是二进制兼容的,那么你仍然完全没有运气。

所以基本上:这是一个流行和重用的问题,并且其他库的一个症状没有跟上它们的下游依赖关系。 Json.NET比其他库看到的更多,因为它比其他许多库使用,包括作为其他库的依赖。

请注意,NuGet会自动添加绑定重定向。