安装应用更新后,应用程序将丢失所有设置

时间:2012-04-12 09:37:10

标签: c# windows-phone-7 isolatedstorage appsettings

这是仅针对某些用户才会出现的问题。每当我在Marketplace中发布我的应用程序的新版本时,我都会收到来自用户的电子邮件,说明应用程序中的所有设置都已丢失。

我自己无法重现这一点,而且我没有可以擦除IsolatedStorage的代码。

如果有人知道可能导致这种情况的任何人,那会很棒。

2 个答案:

答案 0 :(得分:3)

更新:不确定以下内容是否适用于WP7应用 - 我会留在这里以防万一。我只针对普通应用尝试了这个。

您需要“升级”旧的设置文件。

您还需要知道何时需要执行此操作(即仅在安装新版本时)。

要知道何时需要升级设置,请在设置中添加一个名为(例如)NeedSettingsUpgrade的布尔值,并将其默认为true。

然后在Main()的开头附近调用以下函数:

/// <summary>Upgrades the application settings, if required.</summary>
private static void upgradeApplicationSettingsIfNecessary()
{
    // Application settings are stored in a subfolder named after the full #.#.#.# version number of the program. This means that when a new version of the program is installed, the old settings will not be available.
    // Fortunately, there's a method called Upgrade() that you can call to upgrade the settings from the old to the new folder.
    // We control when to do this by having a boolean setting called 'NeedSettingsUpgrade' which is defaulted to true. Therefore, the first time a new version of this program is run, it will have its default value of true.
    // This will cause the code below to call "Upgrade()" which copies the old settings to the new.
    // It then sets "NeedSettingsUpgrade" to false so the upgrade won't be done the next time.

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

注意:您当然需要在程序退出前致电Settings.Default.Save(),否则设置更改将不会保留。

答案 1 :(得分:2)

我的方法是使用程序集版本号作为升级的触发器。首次运行时,它将以v1.0和程序集版本号1.0.0.0所需的格式保存设置。发生升级时,会将保存的设置编号(1.0.0.0)与升级的程序集编号1.1.0.0进行比较,并确定需要升级。

我发现为visual studio进行重新部署并不保证升级,有时它会卸载,重新安装并不是那么好。所以我改为使用Windows Phone Powertools测试我的“升级”路径,因为它似乎可靠地进行升级。