【问题标题】:.Settings file in Win Form App, Best PracticeWin Form App 中的 .Settings 文件,最佳实践
【发布时间】:2011-11-09 12:14:23
【问题描述】:

我有一个 Win Form 应用程序,它在 UserSettings.Settings 文件中存储了一些每个用户的设置。到目前为止,这运作良好,但似乎在我发布更新时设置文件会“重置”。我通过ClickOnce 完成的。

这是预期的行为吗?
我可以控制设置文件中的字段是否被覆盖吗?
有没有更好的方法来存储用户设置?

谢谢

【问题讨论】:

  • 我应该将我的.settings 文件存储在其他地方吗?任何有关如何完成的链接将不胜感激。
  • 您如何部署更新?点击一次?

标签: winforms .net-3.5 clickonce settings


【解决方案1】:

当您发布更新时,您更新后的应用应调用 ApplicationSettingsBase.Upgrade Method 以移动先前版本中的值。这是一个类似的问题:Automatically "upgrade" user settings from previous version of app.config file?

请记住,您应该只调用一次上述方法,因此您可能必须在设置中存储是否已经调用了 Upgrade 并执行以下操作:

if(!Settings.Default.Upgraded)
{
   Settings.Default.Upgrade();
   Settings.Default.Upgraded = true;
   Settings.Default.Save();
}

另一种可能的解决方案是将设置存储在不依赖于应用程序版本的文件夹中。在这种情况下,您不会丢失值,也无需在版本之间升级设置。

【讨论】:

  • 这是正确答案;我几乎要写同样的:)
  • 只是为了清楚;我用ClickOnce 部署或不这样做。根据此处和相关的答案,我正在收集 ClickOnce 为您做了类似的事情,不是吗?
  • 这就是我讨厌赏金的原因......无论如何,这是我开始另一个线程的正确礼仪,因为这并没有解决我的问题。即使使用.Upgrade(),我的设置仍会重置我错过了什么?
  • @ReactedPaladin:调用升级后你会调用保存吗?我没有使用 ClickOnce,所以对此没有任何经验。
  • @Giorgi:是的,我愿意。除了我的变量是NeedsUpgrade 之外,我的设置几乎与您的答案相同。这非常令人沮丧,我在 MSDN 也有一个帖子,到目前为止他们的帮助甚至更少。不过感谢您的帮助,非常感谢。
【解决方案2】:

您将 .Settings 文件保存在哪里?它可能不应该包含在可执行文件的安装目录中。尝试将其移动到用户的应用程序数据目录:

http://blog.kowalczyk.info/article/Getting-user-specific-application-data-directory.html

祝你好运!

【讨论】:

  • 我没有将它保存在任何地方,只是让应用程序将它保存到它所在的任何地方...... :( 这么说我也觉得很愚蠢。我没有意识到我可以控制它的保存位置。
【解决方案3】:

您是否只是将内置的Application Settings 与 ClickOnce 一起使用?

如果是这样,那么您只需在设置编辑器中将 Scope 设置为 User 并设置 will be merged on upgrades as described here

就像 ClickOnce 应用程序的每个版本都与所有版本隔离一样 其他版本,ClickOnce 应用程序的应用程序设置 也与其他版本的设置隔离。当你的 用户升级到更高版本的应用程序,应用程序 settings 比较最新(最高编号)版本的设置 根据更新版本提供的设置并合并 设置到一组新的设置文件中。

【讨论】:

    【解决方案4】:

    在 Windows Vista/7 下 它被保存到:

    C:\Users\USERNAME\AppData\Local\MANUFACTURER_NAME\
    

    C:\Users\USERNAME\AppData\Roaming\MANUFACTURER_NAME\
    

    我很确定它也会保存到 xp 下的应用程序数据中。

    您的设置不断重置,因为新版本使用了不同的文件夹。检查一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 2020-05-01
      • 2011-01-22
      • 2015-10-22
      • 2017-09-06
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多