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

