これは、一部のユーザーにのみ発生する問題です。Marketplace でアプリの新しいバージョンをリリースするたびに、アプリのすべての設定が失われたというメールをユーザーから受け取ります。
これを自分で再現することはできません。また、IsolatedStorage を消去できるコードもありません。
誰かがこれを引き起こしている可能性のある手がかりを持っていれば素晴らしいでしょう.
これは、一部のユーザーにのみ発生する問題です。Marketplace でアプリの新しいバージョンをリリースするたびに、アプリのすべての設定が失われたというメールをユーザーから受け取ります。
これを自分で再現することはできません。また、IsolatedStorage を消去できるコードもありません。
誰かがこれを引き起こしている可能性のある手がかりを持っていれば素晴らしいでしょう.
更新:以下が 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()
ます。そうしないと、設定の変更が保持されません。
これに対する私のアプローチは、アセンブリのバージョン番号をアップグレードのトリガーとして使用することでした。最初の実行時に、v1.0 およびアセンブリ バージョン番号 1.0.0.0 に必要な形式で設定を保存します。アップグレードが発生すると、保存されている設定番号 (1.0.0.0) とアップグレードされたアセンブリ番号 1.1.0.0 を比較し、アップグレードが必要であると判断します。
Visual Studio の再デプロイを行っても、アップグレードが保証されないことがわかりました。アンインストールして再インストールすることもありましたが、これはあまり良くありませんでした。そこで、Windows Phone Powertoolsを使用して「アップグレード」パスをテストするように変更しました。