gpt4 book ai didi

c# - 为什么 Newtonsoft.Json 如此容易发生程序集版本冲突?

转载 作者:太空狗 更新时间:2023-10-29 22:25:29 29 4
gpt4 key购买 nike

我注意到我们的项目中经常遇到程序集版本冲突,90% 的时间是底部的 Newtonsoft.Json。 SO 上有很多专门针对 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 .

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

最佳答案

Why is Newtonsoft.Json so prone to assembly version conflicts?

基本上,因为它通常被其他库应用程序代码用作下游依赖项。如果您有包 A(在本例中为 Netwonsoft.Json),并且您有:

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

然后 A 的所有引用版本都需要相同需要适当的程序集绑定(bind)重定向以允许一个期望版本 7 静默接受版本 10 而不会引发绑定(bind)问题的库。当然,如果 API 在旧库使用的方法中在版本 7 和 10 之间不二进制兼容,那么您仍然完全不走运。

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

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

关于c# - 为什么 Newtonsoft.Json 如此容易发生程序集版本冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44650761/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com