Newtonsoft冲突.Json内核版本

本文关键字:版本 内核 Json 冲突 Newtonsoft | 更新日期: 2023-09-27 18:03:33

我有一个使用Newtonsoft构建的自定义nuget包(让我们称之为custom . sdk)。Json版本8.0.3 (nuget包含对8.0.3 Json dll的引用)。

我的项目。json文件最初使用8.0.3.0,但在我的项目升级到。net Core 1.0后,我被告知其中一个包需要Newtonsoft。Json 9.0.0.0 -因为这个我更新了我的项目。json引用9.0.1(自定义。SDK仍在使用8.0.3 dll)。

现在,当我尝试构建项目时,我得到以下错误:

'Microsoft.AspNetCore.Mvc.Formatters.Json' with identity
Microsoft.AspNetCore.Mvc.Formatters.Json, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=adb9793829ddae60' uses 
'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 
which has a higher version than referenced assembly 
'Newtonsoft.Json' with identity 'Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'

听起来问题是我的习惯。SDK nuget使用的是旧版本的Newtonsoft。Json而我的项目。json引用了新的(我需要升级到。net Core 1.0)。

是否有可能在不更新Custom.SDK中的JSON dll的情况下解决这个问题?

Newtonsoft冲突.Json内核版本

使用旧版本编译的依赖二进制文件的典型情况,当在运行时加载新版本时,您应该能够在App.config中使用BindingRedirect进行解析,如下所示:

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

这将确保在运行时它会请求版本8.0.0.0,它会自动重定向到已经加载的9.0.0.0,请确保版本号和其他信息,如Public Key token是正确的,阅读更多关于绑定重定向这里