C# 程序集绑定重定向 - Newtonsoft.json.



我有以下依赖关系

项目 A(归我所有(使用

  1. project_b.dll
  2. Newtonsoft.Json.dll(版本 8(

项目 B 使用

  1. project_c.dll
  2. Newtonsoft.Json.dll(版本 9(

项目 C 用途

  1. Newtonsoft.Json.dll(版本4.5(

项目 A 调用项目 B 的方法,该方法将调用项目 C 的方法,然后将值返回给 B,然后返回给 A

<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-655535.0.0.0" newVersion="XX" />
</dependentAssembly>

我正在尝试在项目 A 上使用程序集绑定重定向。如果我将"newVersion"设置为9.0,那么代码就会抱怨(缺少Newtonsoft.jSon.dll 4.5库(。同样的事情,如果我将"newVersion"设置为4.5,那么缺少Newtonsoft.Json.dll 9.0库错误就会发生。我也尝试了 8.0 的"新版本"值。它看起来很简单,我认为重定向应该可以解决问题。什么是好的解决方案?项目 A、B 和 C 是否应该具有相同版本的 Newtonsoft.Json.dll?

提前谢谢..

唯一具有高于平均水平的工作机会的解决方案是让所有库都引用相同的"主要"版本 库(8.*9.*等 - 第一个数字(。然后,您应该能够使用程序集绑定重定向来修复比"主要"更小的任何内容,尽管越来越常见的是看到程序集版本有效地固定在主要版本上,以避免程序集绑定重定向地狱。

这里的关键点是,在 semver 下,"主要"中的任何更改都应被视为重大更改,因此您不应期望针对不同"主要"编译的代码能够正常工作,甚至根本不应如此。

注意:从技术上讲,跨专业使用程序集绑定重定向是可能的;您只是不应该期望它实际工作。如果是这样:将其视为意外的奖励。

1.您自己的项目不应具有低于引用的版本,因此在项目 A 上也使用 9.0。

2.如果项目 C 使用应该不是问题的较低版本,但这样做:

在 csproj 中,将自动生成绑定重定向添加到第一个属性组,并删除文件中的所有重定向。

<PropertyGroup>
[...]
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
[...]
</PropertyGroup>

现在,它应该在生成项目时生成正确的重定向。

相关内容

最新更新