我注意到我们经常在项目中遇到程序集版本冲突,90%的时候它是Newtonsoft.Json的底部.对于Newtonsoft.Json冲突有很多问题,例如臭名昭着的"无法加载文件或汇编'Newtonsoft.Json,Version = 6.0.0.0".搜索"汇编'Newtonsoft.Json,版本= 6.0.0.0"提出了37个问题 - 其中很多都被高度赞成.或者这个约为4.5.0.0.
是否有任何解释为什么这种情况经常发生在该库而不是其他库中,为什么它是如此一致的汇编版本冲突源?它肯定比其他库更频繁地发生.
Mar*_*ell 10
为什么Newtonsoft.Json容易出现汇编版本冲突?
基本上,因为它通常被其他库和应用程序代码用作下游依赖项.如果你有包A(在这种情况下,Netwonsoft.Json),你有:
SomeApp
-> A
Run Code Online (Sandbox Code Playgroud)
一切都很棒; 但如果你有:
SomeApp
-> A
-> SomeLib
-> A
Run Code Online (Sandbox Code Playgroud)
要么:
SomeApp
-> SomeLib
-> A
-> SomeOtherLib
-> A
Run Code Online (Sandbox Code Playgroud)
要么:
SomeApp
-> A
-> SomeLib
-> A
-> SomeOtherLib
-> A
Run Code Online (Sandbox Code Playgroud)
要么:
SomeApp
-> A
-> SomeLib
-> A
-> SomeOtherLib
-> YetAnotherLib
-> A
-> MeTooLib
-> A
Run Code Online (Sandbox Code Playgroud)
然后所有引用的版本A需要相同,或者需要使用合适的程序集绑定重定向,以允许期望版本7的lib静默接受版本10而不会引发绑定问题.当然,如果API在旧库使用的方法中在版本7和10之间不是二进制兼容的,那么你仍然完全没有运气.
所以基本上:这是一个受欢迎和重复使用的问题,并且其他库的症状没有及时了解其下游依赖项.Json.NET比其他库看到的更多,因为它比许多其他库使用得更多,包括作为其他库的依赖.
请注意,NuGet会自动添加绑定重定向.
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |