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

.NET 5升级至.NET 6后测试报依赖程序集未找到错误

.NET 5迁移到.NET 6后测试运行失败(找不到Autofac程序集)解决方案

问题背景

  • 项目原基于.NET 5运行,所有单元测试、集成测试均可正常执行
  • 将所有.csproj文件中目标框架按如下配置修改为net6.0后测试异常:
<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
  • 异常表现:Rider中所有测试标记为无结论,测试运行器意外退出,错误日志如下:
Test not run

Last runner error: Test runner agent exited unexpectedly Process /usr/share/dotnet/dotnet:138437 exited with code '140': Error: An assembly specified in the application dependencies manifest (Logging.UnitTests.deps.json) was not found: package: 'Autofac', version: '6.4.0' path: 'lib/net6.0/Autofac.dll'

--- EXCEPTION #1/3 [UnknownExitCodeException]
Message = “
  Process /usr/share/dotnet/dotnet:138437 exited with code '140':
  Error:
    An assembly specified in the application dependencies manifest (Logging.UnitTests.deps.json) was not found:
      package: 'Autofac', version: '6.4.0'
      path: 'lib/net6.0/Autofac.dll'
”
  • 已尝试操作:将Autofac及所有NuGet包更新到最新版本、调整Autofac相关配置,均未解决问题
  • 环境信息:
    • 操作系统:Arch Linux,已安装多版本.NET SDK与运行时,版本清单如下:
dotnet --list-sdks
5.0.407 [/usr/share/dotnet/sdk]
6.0.102 [/usr/share/dotnet/sdk]
6.0.301 [/usr/share/dotnet/sdk]

dotnet --list-runtimes
Microsoft.AspNetCore.App 5.0.16 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.6 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 5.0.16 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.2 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.6 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
  • 特殊表现:应用程序正常启动、调试均无问题,仅测试无法执行,问题可在GitHub流水线中稳定复现

解决步骤

按顺序执行以下操作即可修复问题:

  1. 彻底清理编译残留与NuGet缓存
    旧的bin、obj目录下残留的.NET 5版本deps.json文件是路径解析错误的核心诱因之一,执行以下命令全量清理:
# 递归删除解决方案下所有bin、obj目录
find . -type d -name bin -exec rm -rf {} +
find . -type d -name obj -exec rm -rf {} +
# 清空本地NuGet包缓存,避免损坏的包文件被引用
dotnet nuget locals all --clear
  1. 强制统一.NET SDK版本
    本地安装了两个.NET 6 SDK版本(6.0.102对应运行时6.0.2,6.0.301对应运行时6.0.6),测试运行器可能自动调用了低版本SDK,导致Autofac 6.4.0的net6.0库路径解析失败。在解决方案根目录新建global.json文件,强制指定使用匹配最高版本运行时的SDK:
{
  "sdk": {
    "version": "6.0.301",
    "rollForward": "latestFeature"
  }
}
  1. 统一所有项目的Autofac版本
    遍历解决方案下所有.csproj文件,确认所有项目引用的Autofac版本完全一致为6.4.0,禁止出现同一解决方案下不同项目引用不同版本Autofac的情况,同时删除所有针对Autofac设置的PrivateAssets、手动路径映射等自定义配置。完成后执行包还原与编译:
dotnet restore
dotnet build -c Release
  1. 命令行验证测试运行
    先跳过IDE,直接在命令行执行测试,确认基础环境正常:
dotnet test -c Release --no-build

如果命令行测试全部通过,再重启Rider,进入设置的Build, Execution, Deployment > Unit Testing页面,点击清除测试缓存按钮后重启IDE,即可在IDE中正常运行测试。
5. 流水线适配
在GitHub流水线的.NET环境配置步骤中,明确指定安装6.0.301版本的SDK,不要使用默认自动拉取的小版本,避免和本地验证环境不一致导致相同问题。

该问题的本质是多SDK共存场景下,测试运行器优先读取obj目录下缓存的旧版deps清单,清单中记录的Autofac库路径和当前SDK实际还原的包路径不匹配;主程序启动时会重新生成deps清单,因此不会出现该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:09:18