読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

UWPのApplicationData.Currentのデータをバージョン管理する

アプリの設定とかはApplicationData.Currentの下のLocalSettingsとかRoamingSettingsとかを使うのが一般的ですよね。ここの設定がアプリのバージョンアップによって非互換が発生してしまった!?というときに使える小技を紹介します。

ApplicationData.Current.SetVersionAsyncというメソッドを使います。 このメソッドには、アプリケーションのバージョン番号と、バージョン番号変える時の操作を指定できます。 こんな感じで使います。

await ApplicationData.Current.SetVersionAsync(0, r =>
{
    var d = r.GetDeferral();
    Debug.WriteLine($"CurrentVersion: {r.CurrentVersion}, DesiredVersion: {r.DesiredVersion}");
    // バージョンが違ってたら必要に応じて変換ロジックを走らせる
    d.Complete();
});

アプリのバージョンが上がって仕様が変わったタイミングでSetVersionAsyncの第一引数をインクリメントする感じで使います。 バージョン番号が変わってなくても、第二引数で指定したコールバックは呼ばれるので注意ですね。