ASP.NET Core 6+中如何为appsettings.json设置reloadOnChange
问题:新版ASP.NET Core中为appsettings.json设置reloadOnChange的最简方法
在早期ASP.NET Core模板中,开发者可以通过以下代码直接为appsettings.json设置reloadOnChange标识:
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); }
但在当前ASP.NET Core版本中,默认使用WebApplication.CreateBuilder(args)初始化项目,这种方式无法直接访问reloadOnChange参数。请问为appsettings.json指定reloadOnChange标识的最简、代码量最少的方法是什么?
最简解决方案
你可以通过ConfigureAppConfiguration扩展方法,替换默认的appsettings.json配置源,添加带reloadOnChange参数的版本,代码如下:
var builder = WebApplication.CreateBuilder(args); builder.ConfigureAppConfiguration((context, config) => { // 移除默认的appsettings.json配置源 var defaultAppSettings = config.Sources.FirstOrDefault(s => s is JsonConfigurationSource json && json.Path == "appsettings.json"); if (defaultAppSettings != null) { config.Sources.Remove(defaultAppSettings); } // 添加开启自动重载的appsettings.json config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); }); // 后续服务配置、中间件设置保持原有逻辑 var app = builder.Build(); // ...
如果不需要保留其他默认配置源,也可以直接清除所有配置后重新添加(但这种方式会移除环境变量、命令行参数等默认源,需谨慎使用):
var builder = WebApplication.CreateBuilder(args); builder.Configuration.Clear(); builder.Configuration .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); var app = builder.Build(); // ...
前者是更稳妥的方案,仅替换目标配置文件的源,保留其他默认配置逻辑。
内容的提问来源于stack exchange,提问作者Chris F Carroll
相关产品推荐
相关产品推荐

