如何修复无法加载System.Memory, Version=4.0.1.1程序集的错误?
System.Memory 版本绑定错误修复方案
问题重现
遇到的错误信息:
System.TypeInitializationException: The type initializer for 'ServiceStack.Text.JsConfig' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.
项目已安装 System.Memory v4.5.4,但添加反向绑定重定向后问题未解决:
<dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.5.4.0" newVersion="4.0.1.1" /> </dependentAssembly>
解决办法
1. 修正绑定重定向方向
你的绑定重定向逻辑完全搞反了——应该把程序寻找的旧版本(4.0.1.1)重定向到已安装的新版本(4.5.4),而非反过来。正确配置如下:
<dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.5.4.0" newVersion="4.5.4.0" /> </dependentAssembly>
如果想更精准针对缺失版本:
<dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="4.0.1.1" newVersion="4.5.4.0" /> </dependentAssembly>
2. 确保NuGet包正确安装并还原
- 右键项目→「管理NuGet程序包」,确认
System.Memory版本为4.5.4且无黄色警告 - 执行「还原NuGet包」,确保所有依赖文件下载完整
- 检查项目输出目录(如
bin/Debug),确认System.Memory.dll存在
3. 清理并重建项目
- 点击菜单「生成」→「清理解决方案」
- 删除项目根目录下的
bin和obj文件夹 - 重新生成解决方案,确保编译无报错
4. 更新ServiceStack.Text版本
ServiceStack.Text对System.Memory的依赖可能过时,尝试更新到最新稳定版:
- 在NuGet包管理器中搜索
ServiceStack.Text,选择「更新」 - 更新完成后重新生成项目,验证问题是否解决
5. 排查全局程序集缓存(GAC)
如果系统GAC中存在旧版本System.Memory,可能干扰项目加载:
- 以管理员身份打开命令提示符,执行:
gacutil /l System.Memory - 若存在4.0.1.1版本,可移除(操作前谨慎确认,避免影响其他应用):
gacutil /u System.Memory,Version=4.0.1.1,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51
内容的提问来源于stack exchange,提问作者Rohan Khurana
相关产品推荐
相关产品推荐

