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

为何调用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的默认保存逻辑,具体步骤如下:

实现步骤

  1. 确保项目已引用System.Configuration程序集(默认已引用,若缺失需手动添加)。
  2. 替换原代码中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:58:15