升级至.NET 5.0后IIS托管程序报错,提示缺少指定版本Newtonsoft.Json程序集
项目异常场景
完成项目版本升级后,在IIS托管场景下运行出现故障。已尝试在API项目中引入Newtonsoft.Json依赖,操作后问题仍未解决。
异常日志可在Windows Server 2012 R2的事件查看器中查询,核心异常堆栈如下:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. File name: 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
异常对应的界面为英文系统下的事件查看器报错截图,内容与上述堆栈信息一致。
排查与解决步骤
- 依赖版本一致性校验:排查项目全依赖链路中所有NuGet包对Newtonsoft.Json的版本要求,确认是否存在上层依赖强引用12.0.0.0版本,但项目内安装的Newtonsoft.Json版本不匹配的情况。需安装与公钥令牌
30ad4fe6b2a6aeed匹配的官方12.0.0.0版本Newtonsoft.Json,消除多版本引用冲突。 - 发布文件完整性校验:项目发布后检查IIS站点根目录下的
bin文件夹,确认是否存在对应版本的Newtonsoft.Json.dll文件。若文件缺失,需排查项目配置中是否将该dll的复制输出属性设置为「不复制」、打包流程是否存在规则过滤了该程序集的输出。 - 程序集绑定重定向配置:在API项目对应的
web.config中添加绑定重定向规则,将所有对Newtonsoft.Json不同版本的引用统一指向实际部署的匹配版本,参考配置如下:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <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> </assemblyBinding> </runtime>
- 运行权限校验:确认IIS对应应用程序池的运行身份,对站点根目录下的
bin文件夹具备读取权限,避免因权限不足导致程序集加载失败。 - 全局程序集缓存清理:检查服务器全局程序集缓存(GAC)中是否存在Newtonsoft.Json的冗余版本,清理与项目要求不匹配的残留程序集,避免程序集加载顺序错乱。
内容的提问来源于stack exchange,提问作者Sras
相关产品推荐
相关产品推荐

