アプリケーションの状態を保存(補足)
http://d.hatena.ne.jp/akiramei/20071125/1195977405
↑のフォロー。
保存先にバージョン情報を持っているので、アセンブリのバージョン番号が変わると設定値が無効になってしまいます。その場合、旧バージョンから値を移行させる必要があります。
例えば、こんな感じ。
public class MySettings : ApplicationSettingsBase { const string KEY = "LastExecuted"; // ユーザ毎に保存する [UserScopedSetting] public DateTime LastExecuted { get { // if (this.SettingsKey.Contains(KEY)) {...} // ↑このように書くのはダメ。 // 最初のアクセス時に設定を読み込むようなので、 // アクセスするまでキーが存在しない object o = this[KEY]; if (o == null) { // 古いバージョンの値取得を試みる o = GetPreviousVersion(KEY); if (o == null) return DateTime.MinValue; else Console.WriteLine("古バージョンから値を引き継ぎました。"); } return (DateTime)o; } set { this[KEY] = value; } } }
プロパティを一つ一つ設定するのが面倒な場合は、設定値にバージョン番号などキーになる値を持たせて、それが変更されたらsettings.Upgrade()を呼び出すとか。