基于.NET Framework 4.6.1的Azure Function使用Microsoft Graph时System.Text.Json程序集加载失败问题求助
我之前也碰到过一模一样的情况——明明bin目录里躺着System.Text.Json文件,但Azure Function就是死活找不到对应的版本,折腾了好一会儿才搞定。结合你的场景,给你几个实用的解决方案:
1. 添加程序集绑定重定向
这是最常见的解决思路,.NET Framework下程序集版本不匹配的加载问题大多靠这个搞定。打开项目的App.config文件,在<runtime>节点里加入以下配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <!-- 把newVersion改成你bin目录里实际的System.Text.Json版本号 --> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
注意要核对bin目录里System.Text.Json.dll的实际版本,如果是6.0.0.0或者其他版本,就把newVersion改成对应的数值。
2. 调整Microsoft Graph NuGet包版本
高版本的Microsoft Graph SDK(比如v5及以上)对.NET Core/.NET 5+的适配更好,在.NET Framework 4.6.1上容易出现依赖兼容性问题。你可以尝试降级到v4.x系列的Microsoft Graph包,这个版本对.NET Framework的支持更稳定。
3. 清理并重新生成解决方案
有时候项目缓存或者bin目录里的旧文件会干扰加载。先执行清理解决方案,再重新生成整个项目,确保所有依赖的程序集都是最新且正确复制到运行目录的。
4. 确认复制本地属性
右键项目中引用的System.Text.Json NuGet包,选择属性,把复制本地设置为True。有时候NuGet会默认不开启这个属性,导致程序集没有被正确复制到bin目录。
5. 检查Azure Function运行时配置
在项目属性里确认Azure Function的运行时版本兼容.NET Framework 4.6.1(比如v3运行时)。另外可以在local.settings.json里添加以下配置,强制启用兼容性模式:
{ "IsEncrypted": false, "Values": { "FUNCTIONS_V2_COMPATIBILITY_MODE": "true" } }
你的代码逻辑本身是没问题的,问题出在.NET Framework的程序集加载机制上,按照上面的步骤试一下,应该能解决这个问题。
内容的提问来源于stack exchange,提问作者Jimmy T.

