Newtonsoft.Json版本不匹配:生成的配置为何指向v13?
为何编译后app.exe.config指向Newtonsoft.Json v13版本?
项目中所有Newtonsoft.Json.dll引用的最高版本为12.0.3,本地App.config中的绑定重定向配置如下:
<dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly>
但编译后bin文件夹内的app.exe.config却生成了指向v13的配置:
<dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly>
同时项目中无任何引用v13.0.0的代码,bin内的Newtonsoft.Json.dll实际版本为12.0.3。
可能的原因
- 间接依赖组件引用了v13版本:项目直接依赖的某个NuGet包内部依赖了Newtonsoft.Json v13,编译时MSBuild会自动合并所有依赖的版本信息,生成覆盖范围更大的绑定重定向,哪怕你没有直接引用v13。
- NuGet缓存或还原异常:本地NuGet缓存中可能残留了v13版本的包,编译过程中被意外读取,导致MSBuild误判版本范围。可以尝试清理
%userprofile%\.nuget\packages下的Newtonsoft.Json文件夹后重新还原包。 - 自动绑定重定向逻辑触发:.NET Framework项目默认开启
AutoGenerateBindingRedirects,MSBuild会自动检测所有依赖的版本并生成统一重定向。如果某个间接依赖声明了对v13的依赖,哪怕实际输出的是v12,仍会生成包含v13范围的重定向配置。 - 项目文件残留配置:检查项目.csproj文件,可能存在之前残留的Newtonsoft.Json v13相关
Reference或PackageReference节点,未被彻底清理。 - 解决方案级依赖影响:如果是多项目解决方案,其他项目可能引用了v13版本,解决方案级的NuGet包管理会影响当前项目的绑定重定向生成。
内容的提问来源于stack exchange,提问作者Jan J.
相关产品推荐
相关产品推荐

