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

.NET Core 5控制台应用Program.Main中环境对应appsettings配置加载失败问题

问题根源

C# 中静态成员的初始化顺序为:先执行所有静态字段/自动属性的初始化表达式,再执行静态构造函数。
你当前将Configuration属性的初始化逻辑写在自动属性的初始化器中,执行该逻辑时静态构造函数还未运行,_environment仍为默认的null值,最终拼接出的配置文件名为appsettings..json,该文件不存在且你设置了optional: true,因此不会加载对应环境的配置,只会读取默认appsettings.json的内容。

解决方案

调整静态成员的初始化逻辑,将Configuration的初始化放到静态构造函数中执行,保证环境变量先赋值完成:

// 声明静态成员,不要在定义时初始化
private static readonly string _environment;
private static IConfiguration Configuration { get; }

// 静态构造函数
static Program()
{
    // 第一步:先读取环境变量
    _environment = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Production";
    // 第二步:再初始化配置
    Configuration = new ConfigurationBuilder()
        // 建议用AppContext.BaseDirectory替代Directory.GetCurrentDirectory(),避免工作目录异常导致找不到配置文件
        .SetBasePath(AppContext.BaseDirectory)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{_environment}.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();
}
验证排查小技巧

如果调整后仍有问题,可以临时将环境配置文件的optional参数改为false,如果文件不存在或路径错误会直接抛出异常,方便快速定位文件名、路径拼写问题。

内容的提问来源于stack exchange,提问作者Tom Regan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:07