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

.NET Core 5 Web API使用Xunit测试无法读取appsettings.Development.json问题

问题根因及解决方案

核心原因

  • 配置文件路径不匹配:WebHostBuilder 默认会将测试项目的输出目录作为内容根目录,而appsettings.Development.json通常存放在Web API主项目的根目录,不在测试项目的运行路径下,自然无法读取。
  • 文件复制属性未配置:即使你把配置文件拷贝到测试项目目录下,如果没有把文件的「复制到输出目录」属性设置为「如果较新则复制/始终复制」,项目生成时不会把配置文件输出到运行目录,也会读取失败。
  • 未显式指定配置加载规则:你当前使用的WebHostBuilder默认只会扫描当前内容根目录下的配置文件,没有额外指定读取主项目配置的逻辑,也会导致加载失败。

可用解决方案

方案1:显式指定主API项目的内容根路径

直接在构造TestServer时指定内容根为Web API主项目的路径,修改代码如下:

public ContestTest()
{
    // 路径根据测试项目和主API项目的相对位置调整,示例为主项目存放在CorporateMembership.Api文件夹的场景
    var apiProjectPath = Path.Combine(Directory.GetCurrentDirectory(), "../../../../CorporateMembership.Api");
    var server = new TestServer(new WebHostBuilder()
        .UseContentRoot(apiProjectPath)
        .UseEnvironment("Development")
        .UseStartup<Startup>());

    _httpClient = server.CreateClient();
}

方案2:给测试项目添加配置文件链接

不想硬编码路径可以用链接方式关联主项目的配置文件:

  1. 右键测试项目 → 选择添加 → 现有项
  2. 找到主API项目下的appsettings.json、appsettings.Development.json
  3. 点击添加按钮旁的下拉箭头,选择「添加为链接」
  4. 选中这两个新增的链接文件,在属性面板把「复制到输出目录」设为「如果较新则复制」

方案3:手动指定配置文件加载逻辑

也可以在WebHostBuilder初始化时手动加载对应配置文件:

public ContestTest()
{
    var config = new ConfigurationBuilder()
        .AddJsonFile("appsettings.Development.json")
        .AddEnvironmentVariables()
        .Build();

    var server = new TestServer(new WebHostBuilder()
        .UseConfiguration(config)
        .UseEnvironment("Development")
        .UseStartup<Startup>());

    _httpClient = server.CreateClient();
}

注意:使用该方案需要先确保配置文件已经被输出到测试项目的运行目录,或者已经配置了正确的内容根路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:48:02