首页 > 解决方案 > 如何更改 netstandard 2.0 库使用的 Newtonsoft.Json 的版本

问题描述

我创建了引用 Newtonsoft.Json 12.0.3 nuget 的 netstadard 2.0 类库。当我构建库并通过Assembly.GetReferencedAssemblies()检查引用的程序集时,我看到我的库引用了 Newtonsoft.Json 版本 12.0.0 而不是 12.0.3。

通过dotnet publish命令发布相同的库也会复制 12.0.3 版本的 Newtonsoft.Json。

但是,如果我尝试使用Assembly.Load()从 .net core 3.1 应用程序动态加载该 netstandard 库,然后使用反射来访问类型信息,我会收到无法加载 Newtonsoft.Json 版本 12.0.0 的异常。

如何强制我的类库引用 12.0.3 版本而不是 nuget 上甚至不存在的 12.0.0?

标签: c#jsonnuget.net-standard-2.0

解决方案


Newtonsoft.Json中的程序集版本按设计返回 12.0.0.0。包版本和程序集版本没有直接联系在一起,并且由于各种原因可能会有所不同。(当我增加我的包版本时,我有时会忘记更新程序集版本。)

如果您查看存储库中的buildScripts.ps1,您可以看到在 AssemblyVersion 为空时,AssemblyVersion 被专门设置为主要版本加上0.0 - 确实如此,因为它没有在脚本中的其他任何地方设置。

如果多个包引用不同版本的Newtonsoft.Json,则只需在项目中直接引用 12.0.3 包即可。此时调用Assembly.Load("Newtonsoft.Json")应该加载您想要的版本。


推荐阅读