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

ASP.NET Core 2.1集成与单元测试运行失败:无法加载程序集

解决ASP.NET Core 2.1测试项目的程序集加载异常与版本冲突问题

当你把测试项目升级到ASP.NET Core 2.1,或者新建一个用于测试ASP.NET Core 2.1应用的测试项目时,大概率会碰到这两类问题:

  1. 运行测试时直接抛出System.IO.FileNotFoundException,提示找不到Microsoft.AspNetCore, Version=2.1.0.0这个程序集
  2. 构建过程中弹出一堆MSB3277警告,都是关于不同版本的Microsoft.Extensions.Options、Microsoft.Extensions.Configuration.Abstractions等组件冲突的

下面是我整理的针对性解决步骤,一步步来就能搞定:

一、修复程序集加载异常

这个问题本质是测试项目没有正确关联ASP.NET Core 2.1的共享框架或者依赖引用缺失,按以下步骤排查:

  • 添加ASP.NET Core元包引用:
    不管你用的是xUnit、NUnit还是MSTest,都需要在测试项目的.csproj文件里加上Microsoft.AspNetCore.App的引用——2.1版本的这个元包不需要指定版本号,因为.NET Core 2.x是通过共享框架来管理版本的:
    <ItemGroup>
      <PackageReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
    
  • 确认目标框架设置正确:
    检查测试项目的TargetFramework必须是netcoreapp2.1,不能是net461这类.NET Framework框架,毕竟ASP.NET Core 2.1的共享框架只支持.NET Core运行时:
    <PropertyGroup>
      <TargetFramework>netcoreapp2.1</TargetFramework>
    </PropertyGroup>
    
  • 清理重建解决方案:
    执行下面的命令清除缓存并重新构建,避免旧的程序集残留干扰:
    dotnet clean
    dotnet restore
    dotnet build
    

二、消除MSB3277版本冲突警告

这些警告是因为不同依赖库引用了同一组件的不同版本导致的,ASP.NET Core 2.1的共享框架已经统一了这些基础组件的版本,我们只需要强制对齐版本即可:

  • 显式指定冲突组件的版本:
    在测试项目的.csproj文件中,给所有冲突的组件添加PackageReference,显式指定版本为2.1.0(和共享框架版本保持一致):
    <ItemGroup>
      <PackageReference Include="Microsoft.Extensions.Options" Version="2.1.0" />
      <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.1.0" />
      <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.1.0" />
      <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.1.0" />
      <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.1.0" />
      <PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="2.1.0" />
    </ItemGroup>
    
  • 用Directory.Build.props统一管理版本(多项目场景推荐):
    如果你的解决方案里有多个项目,可以在根目录创建Directory.Build.props文件,统一设置所有项目的依赖版本,不用每个项目单独改:
    <Project>
      <PropertyGroup>
        <MicrosoftExtensionsPackageVersion>2.1.0</MicrosoftExtensionsPackageVersion>
        <AspNetCorePackageVersion>2.1.0</AspNetCorePackageVersion>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsPackageVersion)" />
        <!-- 其他冲突组件依葫芦画瓢添加即可 -->
      </ItemGroup>
    </Project>
    
  • 更新测试框架依赖:
    确保你用的测试框架版本和ASP.NET Core 2.1兼容,比如xUnit建议用2.4.0及以上版本,xUnit.runner.visualstudio用2.4.1及以上版本,旧版本的测试框架可能会依赖更老的组件版本,引发冲突。

完成以上操作后,再运行测试应该就能正常执行,构建时的版本冲突警告也会消失啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:21:31