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

.NET Framework4.6.2升级后Unsafe.dll程序集版本不匹配致测试加载失败

问题排查与解决方案

可能的原因及对应处理步骤

  • 文件被后期替换:虽然两个目录下的文件属性(大小、修改时间等)看起来一致,但单元测试项目构建时,可能被NuGet缓存的旧版本、全局程序集缓存(GAC)中的文件覆盖。
    • 处理:清空两个项目的bin和obj目录后重新构建;执行dotnet nuget locals all --clear清理本地NuGet缓存,再重新还原包。
  • 绑定重定向配置异常:应用项目自动生成了正确的绑定重定向,但单元测试项目未同步配置,导致运行时无法匹配版本。
    • 处理:在单元测试项目的app.config中添加绑定重定向节点:
      <dependentAssembly>
          <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
      </dependentAssembly>
      
      或者右键测试项目→属性→生成→勾选“自动生成绑定重定向”。
  • GAC低版本程序集干扰:全局程序集缓存中存在6.0.0.0版本的System.Runtime.CompilerServices.Unsafe.dll,单元测试运行时优先加载了GAC中的版本,而非项目输出目录文件。
    • 处理:打开命令提示符,执行gacutil /u System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a移除GAC中的旧版本;若需保留,需配置测试项目强制加载本地目录的程序集。
  • NuGet包引用不一致:CDSCore与CDSCore.Tests项目对System.Runtime.CompilerServices.Unsafe的包引用版本不同,导致构建时拉取的程序集版本有差异。
    • 处理:检查两个项目的.csproj文件,确保PackageReference节点中该包的版本统一为6.0.1.0,再重新还原构建。
  • 文件属性缓存误导:Windows显示的文件属性可能来自系统缓存,ildasm读取的程序集元数据版本才是真实版本,二者存在偏差。
    • 处理:直接将CDSCore目录中经ildasm确认是6.0.1.0的文件,替换CDSCore.Tests目录下的对应文件,再重新构建测试项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:27:05