.NET 6环境依赖配置加载异常:开发环境配置未覆盖默认配置
解决.NET 6中appsettings.{Environment}.json不覆盖默认配置的问题
1. 修复代码中的拼写错误
你手动添加配置的代码里存在拼写错误:enironment少写了一个字母m,修正后的代码如下:
var environment = builder.Environment; builder.Host.ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true, reloadOnChange: true); });
这个错误会导致程序无法找到对应的环境配置文件,自然无法实现配置覆盖。
2. 确认环境变量是否正确生效
在var builder = WebApplication.CreateBuilder(args);之后添加一行验证代码,查看当前运行环境:
Console.WriteLine($"当前环境:{builder.Environment.EnvironmentName}");
运行程序后检查控制台输出,确认是否为Development。如果不是,需要检查launchSettings.json中的ASPNETCORE_ENVIRONMENT是否确实设置为Development,同时排查是否存在系统环境变量覆盖该配置的情况。
3. 检查配置文件的输出属性
右键appsettings.Development.json选择「属性」,确保「复制到输出目录」设置为如果较新则复制或始终复制。若该属性为「不复制」,程序运行时输出目录中不会存在此文件,也就无法加载对应的配置。
4. 了解默认配置加载顺序
实际上WebApplication.CreateBuilder(args)已经默认按以下顺序加载配置(后续配置会覆盖前面的同键配置):
- appsettings.json
- appsettings.{Environment}.json
- 用户机密(仅开发环境)
- 环境变量
- 命令行参数
所以正常场景下不需要手动添加环境配置文件的加载代码,若手动添加需注意不要打乱默认加载顺序,避免重复配置导致的异常。
5. 验证配置覆盖逻辑
可以在两个配置文件中设置相同键值对进行测试:
- appsettings.json:
{ "ConnectionStrings": { "DefaultConnection": "来自appsettings.json的连接字符串" } }
- appsettings.Development.json:
{ "ConnectionStrings": { "DefaultConnection": "来自appsettings.Development.json的连接字符串" } }
然后在Program.cs中读取并输出该配置:
var connString = builder.Configuration.GetConnectionString("DefaultConnection"); Console.WriteLine($"连接字符串:{connString}");
若输出为开发环境的连接字符串,说明覆盖生效;若未生效,再回头检查前面的步骤。
内容的提问来源于stack exchange,提问作者Leonidas199x
相关产品推荐
相关产品推荐

