如何向.NET控制台应用添加额外的IConfigurationProvider?
解决控制台应用读取appsettings.Development.json配置失败的问题
核心原因:环境变量未设置为Development
Host.CreateDefaultBuilder(args)默认仅在Development环境下加载appsettings.Development.json,而控制台应用的默认环境是Production,因此该配置文件不会被自动加载。
解决步骤:
设置环境变量
- Windows(命令行):
set ASPNETCORE_ENVIRONMENT=Development - Windows(PowerShell):
$env:ASPNETCORE_ENVIRONMENT = "Development" - Linux/macOS:
export ASPNETCORE_ENVIRONMENT=Development
也可以在项目属性的「调试」选项卡中,添加环境变量
ASPNETCORE_ENVIRONMENT=Development。- Windows(命令行):
验证配置文件结构
确保appsettings.Development.json中的MyAppSettings为根级别节点,示例结构:{ "MyAppSettings": { "Key1": "Value1", "Key2": "Value2" } }检查节点名称拼写是否与代码中的
MyAppSettings完全一致(区分大小写)。手动强制加载配置文件(可选)
若环境变量设置后仍无法加载,可手动添加配置源覆盖默认逻辑:Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); }) .ConfigureServices((hostContext, services) => { var mySettingsSection = hostContext.Configuration.GetSection("MyAppSettings"); // 后续业务逻辑 });确认文件复制状态
前往项目输出目录(如bin/Debug/net8.0),检查是否存在appsettings.Development.json文件且内容与项目内一致。若未复制,重新确认文件的「Build action」为Content、「Copy to output directory」为Copy always。
补充说明
Web应用默认会通过启动设置自动将环境设为Development,而控制台应用无此默认配置,这是两者行为差异的核心原因。
内容的提问来源于stack exchange,提问作者user20326571
相关产品推荐
相关产品推荐

