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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:24:56