App.config已淘汰,.NET Core/.NET 5+不支持其读写;appsettings.json是标准配置文件,但IConfiguration只读,需手动序列化JSON并调用Reload()实现可写配置。

App.config 已淘汰,.NET Core / .NET 5+ 默认不支持它;appsettings.json 是当前标准,但直接用 ConfigurationBuilder 手动构建配置对象才能真正读写——不是加个 NuGet 包就能自动双向同步。
App.config 在现代 C# 项目里根本不能“写”
App.config 是 .NET Framework 时代的遗留机制,靠 ConfigurationManager 读取,但它的设计是只读的。你调用 ConfigurationManager.AppSettings["key"] 能取值,但修改后调用 Save() 不会生效(或仅在当前进程内存中更新,下次启动丢失)。
- 新建的 .NET 6/7/8 项目默认没有 App.config,添加后也不会被自动加载
- 即使强行保留,
ConfigurationManager.OpenExeConfiguration返回的对象在 .NET Core+ 上抛出PlatformNotSupportedException - Visual Studio 生成的
App.config实际被编译为MyApp.exe.config,但运行时不会监听文件变更
appsettings.json 只能读,不能直接写
IConfiguration 接口只提供 GetSection()、GetValue<T>() 等读取方法,没有 Set() 或 Save()。它本质是一个只读的配置快照,背后可能是 JSON、环境变量、内存集合等多种源。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
- 修改
IConfiguration实例本身(如强制转换成ConfigurationRoot)属于未公开行为,不同 SDK 版本可能崩溃 - 手动用
JsonSerializer.Serialize()写回文件可以,但必须自己处理并发写入、格式缩进、注释丢失等问题 - 如果配置项来自多个源(如 appsettings.json + environment variables),写回文件无法还原原始来源逻辑
真要实现“可写配置”,得绕过 IConfiguration 直接操作 JSON 文件
用 System.Text.Json 或 Newtonsoft.Json 读写 appsettings.json 文件本身,再重新加载配置。这是唯一可控、可预测的方式。
- 先用
File.ReadAllText("appsettings.json")加载原始内容,反序列化为JsonDocument或自定义 POCO 类 - 修改目标属性(例如
options.ConnectionStrings.Default),再用JsonSerializer.Serialize()写回文件 - 调用
IConfigurationRoot.Reload()(需保存对IConfigurationRoot的引用)触发重载 - 注意:写文件前建议备份原文件,防止 JSON 格式错误导致应用启动失败
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
<p>// 获取 IConfigurationRoot 引用用于后续 Reload()
var root = (IConfigurationRoot)config;</p><p>// 修改并保存文件(示例用 POCO)
var settings = JsonSerializer.Deserialize<AppSettings>(File.ReadAllText("appsettings.json"));
settings.Logging.LogLevel.Default = "Debug";
File.WriteAllText("appsettings.json", JsonSerializer.Serialize(settings, new JsonSerializerOptions { WriteIndented = true }));</p><p>root.Reload(); // 触发重新加载
别忽略 reloadOnChange 和文件权限这两个硬限制
AddJsonFile(..., reloadOnChange: true) 依赖 FileSystemWatcher 监听文件变化,但它在某些场景下会失效:
- Docker 容器内挂载的卷(尤其是 Windows 主机 + Linux 容器)常无法触发变更事件
- 文件被其他进程独占(如 VS 正在编辑、记事本未关闭)会导致重载静默失败
- Linux 上若部署用户无权读取
appsettings.json,应用启动就报UnauthorizedAccessException,不是运行时报错
写配置时更要检查目标目录是否可写——appsettings.json 通常和程序集同目录,而该目录在 Linux systemd 服务或 Windows 服务中默认不可写。

















