我创建了引用 Newtonsoft.Json 12.0.3 nuget 的 netstadard 2.0 类库。当我构建库并通过 Assembly.GetReferencedAssemblies() 检查引用的程序集时,我发现我的库引用了 Newtonsoft.Json 版本 12.0.0 而不是 12.0.3。
通过 dotnetpublish 命令发布相同的库也会复制 12.0.3 版本的 Newtonsoft.Json。
但是,如果我尝试使用 Assembly.Load() 从 .net core 3.1 应用程序动态加载该 netstandard 库,然后使用反射来访问类型信息,我会得到 Newtonsoft.Json 版本的异常12.0.0 无法加载。
如何强制我的类库引用 12.0.3 版本而不是 12.0.0(nuget 上根本不存在)?
最佳答案
Newtonsoft.Json 中的程序集版本按设计返回 12.0.0.0。包版本和程序集版本并不直接联系在一起,并且由于各种原因可能会有所不同。 (当我增加包版本时,我有时会忘记更新程序集版本。)
如果你看buildScripts.ps1在存储库中,您可以看到当 AssemblyVersion 为空时,AssemblyVersion 专门设置为主要版本加上 0.0 - 确实如此,因为它没有在脚本中的其他任何地方设置。
如果多个包引用不同版本的 Newtonsoft.Json,则只需在项目中直接引用 12.0.3 包即可。此时,调用 Assembly.Load("Newtonsoft.Json")
应该会加载您想要的版本。
关于c# - 如何更改 netstandard 2.0 库使用的 Newtonsoft.Json 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61760439/