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

.NET 8控制台程序读取appsettings.json时无响应求助

.NET 8控制台程序读取appsettings.json时无响应的排查与解决

以下是导致程序在ConfigurationBuilder.Build()处无响应的常见原因及对应解决方案:

1. 检查appsettings.json的复制属性

如果appsettings.json没有被复制到程序输出目录,AddJsonFile因为optional: false会持续尝试读取不存在的文件,进而引发无响应。

  • 右键项目中的appsettings.json文件 → 属性
  • 将复制到输出目录设置为如果较新则复制或始终复制

2. 修正程序运行目录的获取方式

Directory.GetCurrentDirectory()在调试场景下可能指向IDE的工作目录而非程序输出目录,导致文件查找异常。改用AppContext.BaseDirectory获取程序实际运行路径:

static string GetValues()
{
    var configuration = new ConfigurationBuilder()
        .SetBasePath(AppContext.BaseDirectory) // 替换为AppContext.BaseDirectory
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .Build();

    var mySettingValue = configuration["MySetting"];

    return mySettingValue;
}

3. 验证appsettings.json的格式合法性

JSON语法错误(如缺失逗号、引号不闭合、键名未加引号)会导致配置解析过程阻塞。可以用IDE的JSON语法检查功能或本地JSON校验工具验证文件格式。

4. 确认依赖包版本兼容性

确保Microsoft.Extensions.Configuration和Microsoft.Extensions.Configuration.Json包的版本与.NET 8兼容,避免因版本不匹配引发的底层阻塞问题。

额外代码优化点

原代码中mySettingValue[1]存在空引用风险,如果MySetting值为空或长度不足2,会抛出异常。建议添加空值检查:

static void Main(string[] args)
{
    var mySettingValue = GetValues();

    if (!string.IsNullOrEmpty(mySettingValue) && mySettingValue.Length >=2)
    {
        Console.WriteLine($"Hello {mySettingValue[1]}");
    }
    else
    {
        Console.WriteLine("配置值不存在或长度不足");
    }
}

内容的提问来源于stack exchange,提问作者Alexander Thomsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:47:25