【问题标题】:Why are my application settings not getting persisted?为什么我的应用程序设置没有得到持久化?
【发布时间】:2010-11-06 11:12:40
【问题描述】:

所以我有一些 user 范围的设置,但由于某种原因,它们没有保存到 .exe.config 文件中。我执行以下操作:

Properties.Settings.Default.Email = "new@value.com";
Properties.Settings.Default.Save();

但我查看了调试文件夹中的设置文件,它仍然是我在 Visual Studio 中设置的默认设置。我做错了吗?

【问题讨论】:

    标签: c# .net application-settings


    【解决方案1】:

    “用户”定义的设置与“应用程序”定义的设置一起记录在 app.config 中。然而,在现实中,“用户”命名设置是用词不当且颇具误导性。它们应该被称为“默认用户”设置。

    当新用户访问应用程序时,默认情况下会为他们分配“用户”设置。

    如果用户设置与位于 app.config 文件中的“默认用户”设置不同,则仅将用户设置保存到实际用户的 user.config 设置文件中。

    【讨论】:

      【解决方案2】:

      如果您将程序集信息设置为自动生成任何版本号 (1.0.*),那么每次调试应用程序时版本号都会不同,因此每次都会创建一个新文件。

      如果是这种情况,您需要对设置文件执行升级:

      Properties.Settings.Default.Upgrade()
      

      您也可以将NeedsUpgrading的设置默认设置为true,并在执行升级后将其设置为false,以便每次启动应用程序时不更改版本号的最终用户不会升级所有的时间

      【讨论】:

      • 不知道有一种方法叫upgrade,好用。
      • 我在这里使用了这种方法并取得了成功:bytes.com/topic/c-sharp/answers/…
      • 很棒的答案,优雅的需要升级提示!
      【解决方案3】:

      用户设置是特定于用户的,因此它们不会被保存回系统范围的 .exe.config 文件。

      来自LocalSettingsProvider的文档:

      应用程序范围的设置和 默认的用户范围设置是 存储在一个名为 application.exe.config,即 创建在与该目录相同的目录中 可执行文件。应用 配置设置是只读的。 特定用户数据存储在文件中 命名为username.config,存储在 用户的主目录。

      因此,对于仅在调试器下从 VS 运行的 UserSettingsTest 应用程序(因此是 vshost 位),我最终得到了以下路径:

      C:\Users\Jon\AppData\Local\UserSettingsTest
        \UserSettingsTest.vshost.e_Url_pdqoppugkz1vaawbhwkkcu5ibxpi2fgu
        \1.0.0.0\user.config
      

      【讨论】:

      • 我有 WinXP,但在 C:\Documents and Settings\Ryan\Application Data 中没有看到任何此类文件或文件夹。这是正确的地方吗?
      • XP 将是 C:\Documents and Settings\Ryan\Local Settings\Application Data
      • 我今天已经阅读了超过 2 打的答案和文章,这是唯一一个正确的文件名称和位置的文章。当然,是 Jon Skeet。
      • 很好的答案,节省时间。
      【解决方案4】:

      所有用户范围设置都保存在应用程序数据下的文件夹中,该文件夹指示应用程序的版本和名称。

      您可以通过单击“应用程序设置”对话框中的“同步”来查看这些文件夹。

      一般在 Vista 中:

      • c:\users[currentuser]\AppData\Local[CompanyName][AppName]\version
      • c:\users[currentuser]\AppData\Roaming[CompanyName][AppName]\version

      这样做是因为设置与当前用户UAC相关。在 Vista 中,您甚至可以看到应用程序范围的设置并未存储​​在配置文件中。

      [CompanyName] 和 [ProductName] 来自您的装配信息设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 2010-10-06
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        相关资源
        最近更新 更多