2011年07月24日

アプリケーションの設定情報の扱いについて考えてみる(3)

   このエントリーをはてなブックマークに追加 Clip to Evernote
「アプリケーションの設定情報の扱いについて考えてみる」 の3回目です。

■ バージョンアップ時に前バージョンの情報を引き継ぐ

アセンブリのバージョンが上がったときは、configファイルの保存場所が変更されることは前回説明しました。
これは何を意味するかというと、そのままでは、前バージョンの設定情報を取得することができないということです。
Windowsのサイズと位置程度ならば、初期状態に戻ってしまってもかまわないかもしれませんが、設定情報を引き継ぎたいということは、良くあることです。
この目的のために、ApplicationSettingsBase には、Upgradeというメソッドが用意されています。

しかし、何を基準にUpgradeを呼び出したら良いのかを判断する方法が用意されていないようです。
※ 調べましたが、見つけることができませんでした。

そのため、自前でバージョンが変更されたかどうかを判断するコードを書く必要があります。

ここでは、IsUpgraded というプロパティを WindowInfoに追加することで対応します。


このプロパティを使った、設定情報の読み込みを以下に示します。


これで、設定情報の引継ぎが可能になります。

2011/8/9 追記
IsUpgradedプロパティのコードが間違っていましたので、訂正しました。


この記事へのコメント
IsUpgradedプロパティのコードはCountになっていますが、
以下のようになるのではないでしょうか?

private readonly string IsUpgradeKey = "IsUpgraded";
[UserScopedSetting]
[DefaultSettingValue("false")]
public bool IsUpgraded {
get { return (bool)this[IsUpgradeKey]; }
set { this[IsUpgradeKey] = value; }
}

また、個人的にプロパティ名とキー名が一致いていないと
'System.Configuration.SettingsPropertyNotFoundException' が
発生してしまうことにハマりました。(IsUpgradeKey = "IsUpgrade" だとダメ)
Posted by gaba at 2011年08月09日 15:16
gabaさん、コメントありがとうございます。
ご指摘のとおり、コードが間違っていました。
修正しておきます。
どうもありがとうございました。

そういえば、プロパティ名と一致させないといけないことは、
記載してませんでしたね m(_ _)m�。。。。。。。。
Posted by Gushwell at 2011年08月09日 21:08
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52175487