2017-07-19 48 views
1

我终于明白,我可以从以前的版本使用类似下面的代码保存用户设置:当我更改设置的漫游属性时,如何保留用户设置的值?

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

然而,这似乎并没有,如果我改变设定的漫游属性生效。当我将漫游设置更改为本地或反之亦然时,是否有任何方法可以让设置值继续传输而不重置?

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

重现:

  1. 将名为MySetting设置。
  2. 将MySetting的漫游属性更改为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的漫游属性更改为false
  8. 再次增加程序集版本。
  9. 再次运行代码,注意到输出了默认值。

回答

1

如果你知道哪些属性已经从漫游更改= true来漫游= false,那么你可以手动添加SettingsManageabilityAttributeSettingsProperty.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"));