升级Windows Server 2022后.NET Core项目Newtonsoft.Json加载异常求助
解决Windows Server 2022上.NET Core项目Newtonsoft.Json版本冲突问题
问题分析
这个问题核心是程序集版本重定向失效或依赖传递导致的版本不一致。Windows Server 2022可能预装了更高版本的Newtonsoft.Json(比如13.0.0.0),或者项目里某个依赖包间接引用了13.0.0.0,而你的项目明确依赖9.0.0.0,加载时就会出现版本不匹配的冲突。
解决方案
1. 统一项目Newtonsoft.Json版本
- 打开解决方案的NuGet包管理器,在解决方案级别统一安装9.0.0版本的Newtonsoft.Json,确保所有项目引用版本完全一致。
- 检查每个项目的
.csproj文件,确认PackageReference节点里的版本是9.0.0,没被其他依赖覆盖:<PackageReference Include="Newtonsoft.Json" Version="9.0.0" />
2. 添加版本重定向配置
在项目的web.config(ASP.NET Core项目)或app.config(控制台项目)中添加重定向规则,强制所有引用指向9.0.0.0版本:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="9.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
3. 清理并重生成解决方案
- 删除所有项目的
bin和obj目录,清除旧编译输出。 - 在Visual Studio中执行清理解决方案,再执行重新生成解决方案,确保所有依赖项都是统一的9.0.0版本。
4. 检查全局程序集缓存(GAC)
Windows Server 2022的GAC中可能存在13.0.0.0版本的Newtonsoft.Json,导致加载时优先选择该版本:
- 打开Visual Studio开发者命令提示符,执行命令查看GAC中的版本:
gacutil /l Newtonsoft.Json - 如果存在13.0.0.0版本,执行命令卸载:
gacutil /u Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
5. 启用NuGet包锁定
通过包锁定文件固定依赖版本,避免意外升级:
- 在项目的
.csproj文件中添加配置:<PropertyGroup> <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile> </PropertyGroup> - 执行
dotnet restore生成packages.lock.json文件,提交到版本控制,确保所有环境依赖版本一致。
验证方法
部署到Windows Server 2022后,检查项目输出目录里的Newtonsoft.Json.dll版本是否为9.0.0.0,同时查看事件查看器的应用程序日志,确认无版本冲突异常。
内容的提问来源于stack exchange,提问作者Mehdavi5
相关产品推荐
相关产品推荐

