【问题标题】:How to change the version of Newtonsoft.Json used by netstandard 2.0 library如何更改 netstandard 2.0 库使用的 Newtonsoft.Json 版本
【发布时间】:2020-05-12 19:35:23
【问题描述】:

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

【问题讨论】:

  • 使用绑定重定向?绑定重定向通常根据需要自动生成;如果从动态加载的库中使用,则加载器可能不是同一构建链的一部分(也就是说,没有使用 Newtonsoft.Json 直接引用程序集,因此没有这样适当的绑定重定向)。手动绑定重定向或直接包含 12.0.3 版本作为加载程序项目/构建的依赖项就足够了。
  • 有没有办法删除这个看似毫无意义的重定向(为什么我仍然想要旧版本?)或者以某种方式将重定向信息传递给 Assembly.Load() 调用?

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多