【问题标题】:How do I preserve a user setting's value when I change the setting's roaming property?更改设置的漫游属性时如何保留用户设置的值?
【发布时间】:2017-12-24 21:48:40
【问题描述】:

我了解到我可以使用以下代码保留以前版本的用户设置:

        if (Settings.Default.UpgradeRequired)
        {
            Settings.Default.Upgrade();
            Settings.Default.UpgradeRequired = false;
            Settings.Default.Save();
        }

但是,如果我更改设置的漫游属性,这似乎不起作用。当我将设置从漫游更改为本地或反之亦然时,有什么方法可以让设置值结转而不重置?

编辑:我研究了一种使用 GetPreviousVersion() 方法将漫游设置升级到本地设置的可能方法,但它不起作用,因为如果当前设置不是之前的设置版本正在漫游,则根本不返回以前的版本。

复制:

  1. 进行名为 MySetting 的设置。
  2. 将 MySetting 的 Roaming 属性更改为 true
  3. 确保 MySetting 的范围是 User
  4. 运行以下代码:

        Console.WriteLine(Settings.Default.GetPreviousVersion("MySetting"));
        Settings.Default.MySetting = "Not the default value.";
        Settings.Default.Save();
    
  5. 增加程序集版本。
  6. 再次运行代码,注意到输出了新值。
  7. 将 MySetting 的 Roaming 属性更改为 false
  8. 再次增加程序集版本。
  9. 再次运行代码,注意输出的是默认值。

【问题讨论】:

    标签: c# visual-studio upgrade settings roaming


    【解决方案1】:

    如果您知道哪些属性已从 roaming=true 更改为 roaming=false,则可以手动将 SettingsManageabilityAttribute 添加到 SettingsProperty.Attributes 字典中,使用 GetPreviousVersion 检索之前的值,然后从要清理的字典:

    Console.WriteLine("Current: {0}", Settings.Default.MySetting);
    // we don't see the previous value here...
    Console.WriteLine("Previous: {0}", Settings.Default.GetPreviousVersion("MySetting"));
    // ...so we manually add the SettingsManageabilityAttribute to it...
    var setting = Settings.Default.Properties["MySetting"];
    setting.Attributes.Add(typeof(SettingsManageabilityAttribute), new SettingsManageabilityAttribute(SettingsManageability.Roaming));
    // ...retrieve the previous value...
    Console.WriteLine("Previous: {0}", Settings.Default.GetPreviousVersion("MySetting"));
    // ...and then clean up after ourselves by removing the attribute.
    setting.Attributes.Remove(typeof(SettingsManageabilityAttribute));
    // ...now we don't see the previous value anymore.
    Console.WriteLine("Previous: {0}", Settings.Default.GetPreviousVersion("MySetting"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2011-01-16
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多