如何在进程内Azure函数中使用System.Text.Json 7?加载错误排查
问题原因与解决方案
核心原因
这个错误本质是程序集版本不匹配:
- 你安装的
System.Text.JsonNuGet包版本是7.0.1,但该包对应的程序集版本实际为7.0.0.0(部分.NET库的NuGet版本和程序集版本存在差异,小版本更新通常不会变更程序集版本号)。 - 进程内模式下,Azure Functions宿主基于.NET 6构建,它自身或其他依赖组件尝试加载
System.Text.Json 7.0.0.0,但你的项目运行时未能正确提供该版本程序集,或未配置绑定重定向,导致加载失败。
与进程内运行模式的关系
确实有关:
- 进程内模式中,你的函数代码与Azure Functions宿主共享同一个.NET运行时环境。宿主依赖的框架组件版本固定(对应.NET 6的配套版本),如果你引入跨大版本的组件(比如从6.x跳到7.x),极易出现版本冲突。
- 进程外(隔离)模式下,函数代码运行在独立的.NET进程中,与宿主环境隔离,这类版本冲突问题会显著减少,但进程内模式的性能优势更突出。
解决方案
1. 降级到匹配.NET 6的版本
直接将System.Text.Json降级到6.x系列版本(比如6.0.16),这是最稳妥的方案。因为.NET 6自带的System.Text.Json就是6.x版本,与宿主环境完全兼容,不会出现版本冲突。
2. 配置程序集绑定重定向
如果必须使用7.0.1版本,可通过绑定重定向将7.0.0.0版本的请求定向到7.0.1版本:
- 在项目根目录创建或修改
runtimeconfig.json文件,添加以下配置:
{ "runtimeOptions": { "assemblyBinding": { "dependencies": { "System.Text.Json": { "assemblyVersion": "7.0.0.0", "publicKeyToken": "cc7b13ffcd2ddd51", "redirectTo": "7.0.1.0" } } } } }
- 若项目是类库类型,可添加
app.config文件并配置:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="7.0.0.0" newVersion="7.0.1.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
3. 排查间接依赖冲突
使用NuGet包管理器的“查看依赖关系”功能,检查是否有其他第三方包间接引用了System.Text.Json 7.0.0.0。如果存在,可尝试升级或降级该第三方包,使其与你安装的7.0.1版本兼容。
内容的提问来源于stack exchange,提问作者Erik Z
相关产品推荐
相关产品推荐

