c# - 如何更改 netstandard 2.0 库使用的 Newtonsoft.Json 版本

标签 c# json nuget .net-standard-2.0

我创建了引用 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/

相关文章:

c# - 从 PowerShell 脚本或 .NET 重新运行失败的 .NET 单元测试

c# - 如何创建一个名称与表名不同的 petapoco 类?

c# - 使用继承将 List<T> 序列化为 XML

javascript - 如何使用 javascript 或 jquery 以表格格式显示 JSON 对象?

python - 尝试格式化并打印列表中的多个(动态)字典

c++ - curl 与 Visual Studio 2013

c# - 'System.Data.Entity.Internal.AppConfig' 的类型初始值设定项在子网站上抛出异常

c# - 如何将某些颜色分类到颜色范围?

c# - 与另一个项目一起开发共享库,而不让它们位于同一个解决方案中

c++ - 在 Visual Studio 2008 上使用 jsoncpp