不同解决方案中的不同 NuGet 包

Different NuGet package in separate solutions

我有两个解决方案Sln1和Sln2,Sln1有两个project(还有很多但是,为了简单起见使用这种情况)projectA和ProjectB。 ProjectA 是 WebApi,ProjectB 是 Class 库项目。这两个项目都使用 Newtonsoft.Json 10.0.0。在另一个 Sln2 中,我有 ProjectC 并从 Sln1 添加了 ProjectB。在 ProjectC 中,我也有 Newtonsoft.Json 但版本 6.0.0.,当我将 ProjectB 作为参考项目添加到 ProjectC 时,我收到此错误:

Could not load file or assembly 'Newtonsoft.Json 10.0.0., Culture=neutral' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

以下是我的解决方案的组织方式。

-Sln1
  --ProjectA - WebApi - Newtonsoft.Json 10.0.0
  --ProjectB - Class library - Newtonsoft.Json 10.0.0

-Sln2
  --ProjectC - WebApp - Newtonsoft.Json 6.0.0
  --ProjectB - Class library (add from Sln1) - Newtonsoft.Json 10.0.0

这种情况不起作用,另请注意,ProjectB 已添加为 ProjectA 和 ProjectC 中的参考。

但是当我将 ProjectB 中的 Newtonsoft.Json 版本从 10.0.0 降级到 6.0.0 时,我的解决方案编译和运行时都没有出现错误。

-Sln1
  --ProjectA - WebApi - Newtonsoft.Json 10.0.0
  --ProjectB - Class library - Newtonsoft.Json 6.0.0

-Sln2
  --ProjectC - WebApp - Newtonsoft.Json 6.0.0
  --ProjectB - Class library (add from Sln1) - Newtonsoft.Json 6.0.0

为什么会这样,我认为我需要在两种解决方案中使用相同版本的 NuGet 数据包? 如果这是可行的情况,我可以一直依赖这种方法,所以我不需要在其他项目中使用相同版本的程序集吗?

在配置文件中为Newtonsoft.Json添加绑定重定向配置即可解决问题。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">   
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
        </dependentAssembly>
</assemblyBinding>

也可以参考.