.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
相关产品推荐
相关产品推荐

