我注意到我们经常在项目中遇到程序集版本冲突,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。
有没有任何解释为什么这种情况经常发生在该库而不是其他库中,为什么它是如此一致的汇编版本冲突源?它肯定比其他库更频繁地发生。
答案 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会自动添加绑定重定向。