You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuget错误拉取System.Runtime.CompilerServices.Unsafe版本导致System.Text.Json运行异常

问题解答

疑问1:为什么Nuget安装的System.Runtime.CompilerServices.Unsafe版本和System.Text.Json 5.0.1依赖的版本不一致?

Nuget执行依赖解析时遵循「最近获胜」规则:当多个依赖包共同依赖同一个包时,Nuget会选择所有依赖要求中版本最高的那个进行统一安装。你项目中引入的Grpc 2.41.1、Google.Protobuf 3.19.1这两个包对System.Runtime.CompilerServices.Unsafe的最低版本要求高于4.0.4.1,最终Nuget选择了满足所有依赖要求的最高版本5.0.0.0进行安装,并非安装错误。

疑问2:更高版本的依赖包满足最低版本要求,为什么运行时还会报加载失败?

Nuget包声明的「最低版本兼容」是包管理层面的规则,和.NET运行时的程序集加载规则是两套逻辑:

  • System.Text.Json 5.0.1、System.Memory等包编译时引用的是强命名的4.0.4.1版本System.Runtime.CompilerServices.Unsafe,.NET运行时默认对强命名程序集采用严格版本匹配策略,运行时会优先寻找编译时绑定的 exact 版本,找不到就抛出FileNotFoundException。
  • 你遇到的异常源是System.Memory,就是System.Memory组件运行时尝试加载4.0.4.1版本的依赖失败导致的,和System.Text.Json本身的兼容性无关。
解决方案

根据你使用的框架版本选择对应处理方式:

  • 如果是.NET Framework项目:
    手动在App.config/Web.config的节点下添加绑定重定向规则,强制所有版本的该依赖都重定向到你已安装的5.0.0.0版本:
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

也可以右键项目进入属性页,在「生成」 tab 中勾选「自动生成绑定重定向」选项,让VS自动生成对应规则。

  • 如果是.NET Core/.NET 5+项目:
    该类框架默认自动处理程序集重定向,若出现该错误可在项目文件的节点中添加以下配置,开启自动绑定重定向:
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
  • 兜底方案:
    直接在项目中显式安装对应版本的System.Runtime.CompilerServices.Unsafe包,Nuget会优先使用你显式指定的版本,再配合绑定重定向即可解决问题。

内容的提问来源于stack exchange,提问作者fofo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:45:03