如何修复System.Memory程序集加载失败的0x80131040错误
问题描述
访问站点URL时网页未正常加载,抛出如下程序集加载错误:
Could not load file or assembly 'System.Memory' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
已完成的初步排查:
- 核对web.config配置与项目解决方案
- 确认/bin目录下存在
System.Memory.dll文件 - 尝试删除对应dll后重新生成解决方案,问题未解决
排查修复方案
按以下优先级逐一排查即可定位问题:
- 核对程序集绑定重定向配置:找到/bin目录下的
System.Memory.dll,右键打开「属性-详细信息」查看实际文件版本,再打开web.config中System.Memory对应的<dependentAssembly>配置节点,确认bindingRedirect声明的版本范围、目标重定向版本和实际dll版本完全一致。配置声明的版本和实际部署dll版本不匹配是该错误的最高频诱因,哪怕dll存在于bin目录也会触发加载失败。 - 校验依赖项完整性与版本匹配:
System.Memory强依赖System.Runtime.CompilerServices.Unsafe程序集,需确认该dll同样存在于bin目录,且版本匹配要求:System.Memory4.5.x版本对应依赖Unsafe 4.5.1版本,System.Memory4.5.4版本对应依赖Unsafe 4.5.3版本,依赖缺失或依赖版本不符同样会抛出该错误。 - 彻底清理编译与运行缓存:不要仅删除单个dll,需清空项目根目录下的bin、obj文件夹后重新生成解决方案;如果是IIS部署场景,先停止对应站点的应用程序池,删除
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files路径下对应站点的临时编译缓存,避免旧版本dll被缓存锁定,导致运行时加载的文件和bin目录下的实际文件不一致。 - 统一全项目引用版本:在解决方案中检查所有项目(包括被引用的类库项目)引用的
System.Memory版本,确保所有项目引用的版本完全一致;同时检查引用属性中「复制本地」选项是否设置为True,避免生成时未将正确版本的dll拷贝到输出目录。 - 排查全局程序集缓存(GAC)优先级问题:运行时会优先加载GAC中注册的程序集,而非bin目录下的文件。打开Visual Studio开发人员命令提示符,执行
gacutil /l System.Memory查看GAC中是否注册了System.Memory,如果存在和项目需求版本不匹配的注册项,卸载对应GAC程序集后重启站点即可。
内容的提问来源于stack exchange,提问作者Paul T. Rykiel
相关产品推荐
相关产品推荐

