为何调用My.Settings.Save()时App.exe.config未更新?
解决User类型设置保存到App.exe.config的问题
首先明确:.NET里User类型的设置本身就被设计为保存到用户专属的AppData目录(也就是你看到的user.config),目的是为不同用户保留独立配置,同时避免程序目录(尤其是受保护的Program Files)的写入权限问题。而Application类型的设置是只读的,无法通过Save()方法修改。
如果一定要把修改后的设置保存到App.exe.config,你需要手动操作Configuration类,绕过My.Settings的默认保存逻辑,具体步骤如下:
实现步骤
- 确保项目已引用
System.Configuration程序集(默认已引用,若缺失需手动添加)。 - 替换原代码中
MySettings.Default.Save()的逻辑,改为直接读写程序目录的配置文件。
修改后的示例代码
Private Sub DecreaseFont_Click(sender As Object, e As RoutedEventArgs) Handles Decrease_Font.Click MySettings.Default.Reload() Dim currentSize As Integer = My.Settings.Font_Size Dim newSize As Integer = currentSize - 2 If newSize >= 10 Then FunLabel.FontSize = newSize End If ' 更新My.Settings中的内存值 MySettings.Default.Font_Size = newSize ' 手动写入App.exe.config Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) ' 定位并更新目标配置项 config.AppSettings.Settings("Font_Size").Value = newSize.ToString() ' 保存修改 config.Save(ConfigurationSaveMode.Modified) ' 刷新配置,让后续读取立即生效 ConfigurationManager.RefreshSection("appSettings") End Sub
关键注意事项
- 权限限制:若程序安装在
Program Files等系统保护目录,普通用户无写入权限,会导致保存失败。此时要么给程序目录添加写入权限,要么以管理员身份运行程序,但这会带来安全和体验问题。 - 配置同步:手动修改
App.exe.config后,My.Settings不会自动感知变化,需调用MySettings.Default.Reload()重新读取。 - 多用户冲突:所有用户共享同一个
App.exe.config,单个用户的修改会影响所有使用该程序的用户,这违背了User类型设置的设计初衷,请谨慎使用。
内容的提问来源于stack exchange,提问作者k1dfr0std
相关产品推荐
相关产品推荐

