Приложение теряет все настройки при установке обновления приложения

Это проблема, которая возникает только у некоторых пользователей. Всякий раз, когда я выпускаю новую версию своего приложения в Marketplace, я получаю электронные письма от пользователей, в которых говорится, что все настройки в приложении потеряны.

Я не могу воспроизвести это сам, и у меня нет кода, который может стереть IsolatedStorage.

Было бы здорово, если бы кто-то там имел представление о том, что может быть причиной этого.


person John    schedule 12.04.2012    source источник
comment
Меня тоже интересует ваша проблема. Я заметил нечто подобное при тестировании своего приложения. При запуске из Visual Studio и нацеливании на телефон (а не на эмулятор) иногда он стирал базу данных и создавал ее заново, а иногда просто обновлял код, не удаляя базу данных.   -  person Dante    schedule 12.04.2012


Ответы (2)


Обновление: не уверен, что следующее применимо к приложениям 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() перед выходом из программы, иначе изменение настроек не будет сохранено.

person Matthew Watson    schedule 12.04.2012

Мой подход к этому заключается в использовании номера версии сборки в качестве триггера для обновления. При первом запуске сохраняет настройки в формате, необходимом для версии 1.0 и номер версии сборки 1.0.0.0. Когда происходит обновление, он сравнивает сохраненный номер настройки (1.0.0.0) с номером обновленной сборки 1.1.0.0 и решает, что необходимо обновление.

Я обнаружил, что повторное развертывание для Visual Studio не гарантирует обновления, иногда выполняется удаление и переустановка, что не так хорошо. Поэтому я перешел на использование Windows Phone Powertools, чтобы проверить мой путь "обновления", поскольку он, кажется, надежно выполняет обновления.

person gbanfill    schedule 12.04.2012
comment
Спасибо, посмотрю. Но у меня все еще есть проблема, у вас есть какие-либо идеи о том, что вызывает это? - person John; 14.04.2012