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

.NET6 xUnit单元测试项目报Can't load type Startup错误如何解决?

故障排查与解决办法

报错根本原因:运行单元测试时,系统尝试在Services.Tests项目中查找Startup类但未找到,可按以下步骤排查修复:

  • 检查测试项目是否存在错误的启动类配置:若xunit.runner.json、项目属性中指定了不存在的Startup类作为启动入口,或开启了不必要的应用域隔离配置,都会触发该错误。
  • 检查.NET版本适配问题:若项目使用.NET 6及以上版本的极简顶层语句结构,默认生成的Program类为内部类,测试项目无法访问时会自动降级查找已弃用的Startup类,导致报错。

修复方案

方案1:修改xUnit运行配置(优先尝试)

在测试项目根目录新增xunit.runner.json文件,写入以下配置:

{
  "disableAppDomain": true,
  "shadowCopy": false
}

修改完成后右键点击该文件,将「复制到输出目录」属性设置为「如果较新则复制」,重新运行测试即可。

方案2:暴露主项目内部成员(针对.NET 6+项目)

在主项目的Program.cs文件末尾添加以下代码,显式声明Program类为公共分部类:

public partial class Program { }

同时在主项目的.csproj配置文件中添加节点,允许测试项目访问内部成员:

<ItemGroup>
  <InternalsVisibleTo Include="Services.Tests" />
</ItemGroup>

方案3:调整测试的服务注册逻辑

若不需要依赖主项目的CreateHostBuilder方法,可以直接在测试构造函数中手动注册所需服务,避免主机初始化时自动查找启动类:

public SendGridEmailSenderTest()
{
    var services = new ServiceCollection();
    // 手动注册配置、所需服务
    services.Configure<DataAccess.Models.Config.Constants>(opt => { /* 赋值配置 */ });
    services.Configure<SendGridEmailSettings>(opt => { /* 赋值配置 */ });
    _services = services.BuildServiceProvider();
    
    constants = _services.GetRequiredService<IOptions<DataAccess.Models.Config.Constants>>();
    sendGridEmailSettings = _services.GetRequiredService<IOptions<SendGridEmailSettings>>();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:15:02