ASP.NET Web Forms集成Azure KeyVault/MSAL遇Newtonsoft.Json版本冲突问题
解决Newtonsoft.Json版本冲突导致的FileLoadException问题
这个问题本质是程序集版本绑定冲突——虽然你已经升级了Newtonsoft.Json到10.0.0,但Microsoft.Rest.ClientRuntime.Azure在编译时仍依赖旧版本的Newtonsoft.Json(6.0.0),CLR默认会尝试加载编译时指定的版本,最终导致版本不匹配报错。下面是一步步的解决方案:
1. 添加程序集绑定重定向(最核心步骤)
在你的web.config文件的<runtime>节点下,添加Newtonsoft.Json的绑定重定向规则,强制CLR用10.0.0版本替代所有旧版本:
<runtime> <!-- 保留原有其他绑定规则 --> <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> </runtime>
这条规则会告诉CLR:任何对0.0.0.0到10.0.0.0版本的Newtonsoft.Json请求,都自动替换为你安装的10.0.0.0版本。
2. 清理并重新生成解决方案
项目的bin/obj目录可能残留旧版本DLL,导致冲突无法消除:
- 右键你的解决方案 → 选择清理解决方案
- 手动删除项目根目录下的
bin和obj文件夹 - 右键解决方案 → 选择重新生成解决方案
3. 验证NuGet包依赖链
打开NuGet包管理器控制台,运行以下命令查看项目的所有包依赖:
Get-Package -ProjectName YourWebFormsProjectName
确认:
Microsoft.Rest.ClientRuntime.Azure是3.3.18版本Microsoft.Rest.ClientRuntime是2.3.17版本- 这两个包的依赖项中,Newtonsoft.Json的版本确实是10.0.0(如果不是,尝试重新安装:
Update-Package Microsoft.Rest.ClientRuntime.Azure -Reinstall)
4. 检查项目中的直接DLL引用
如果你的项目存在直接引用的Newtonsoft.Json.dll(非NuGet安装),右键项目 → 引用 → 找到Newtonsoft.Json,确认它的版本是10.0.0,若为旧版本则替换为新版本DLL。
完成以上步骤后,重新运行ASP.NET Web Forms应用,应该就能解决这个FileLoadException问题了。
内容的提问来源于stack exchange,提问作者tulasi karnati
相关产品推荐
相关产品推荐

