如何在WPF应用运行时修改app.config中appSettings的PdfSavePath
解决WPF运行时修改app.config中AppSettings值的问题
你遇到的问题很常见——直接用ConfigurationManager.AppSettings["PdfSavePath"] = SavePath只会修改内存中的临时值,根本不会把变更持久化到实际的配置文件里,而且这个索引器本质上是只读的,赋值操作其实不会生效。
要实现运行时修改并持久化配置,你需要通过Configuration对象来操作,具体步骤如下:
1. 确保引用System.Configuration程序集
WPF项目默认不会自动引用这个程序集,你需要手动添加:
- 右键项目 → 管理NuGet程序包,搜索
System.Configuration.ConfigurationManager并安装; - 或者在项目引用里添加框架程序集
System.Configuration。
2. 使用可写的Configuration对象修改并保存
下面是完整的代码示例,假设SavePath是用户选择的新路径:
using System.Configuration; // 获取当前应用的可写配置对象 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // 修改指定键的值 if (config.AppSettings.Settings["PdfSavePath"] != null) { config.AppSettings.Settings["PdfSavePath"].Value = SavePath; } else { // 如果键不存在,新增一个 config.AppSettings.Settings.Add("PdfSavePath", SavePath); } // 保存变更到配置文件 config.Save(ConfigurationSaveMode.Modified); // 刷新ConfigurationManager,让内存中的值同步更新 ConfigurationManager.RefreshSection("appSettings");
注意事项
- 保存后,实际修改的是运行目录下的
你的应用名.exe.config文件,而不是项目中的原始app.config(原始文件只会在编译时复制到输出目录); - 如果你的应用是ClickOnce部署的,这种方式可能不适用,因为ClickOnce的配置文件有特殊的处理机制;
- 确保应用有对运行目录的写入权限,否则保存会抛出权限异常。
内容的提问来源于stack exchange,提问作者Gregor
相关产品推荐
相关产品推荐

