Visual Studio デベロッパー センター >
Visual Studio フォーラム
>
Visual Studio 共通 フォーラム
>
ApplicationSettingsBase.Upgrade メソッドを呼ぶ判断をするには
ApplicationSettingsBase.Upgrade メソッドを呼ぶ判断をするには
- Visual Studio 2008Windows Forms アプリケーションこんにちは、ダッチです。ApplicationSettingsBase クラスを使用してアプリケーションの設定(ユーザースコープ)の読み書きをしています。設定を読み書きすることはできたのですが、アプリケーションをバージョンアップしたときに、設定を引き継ぐために呼ぶことになる Upgrade メソッドを呼ぶ判断方法がわかりません。アプリケーション起動時に毎回呼んでしまうと、毎回前のバージョンの設定を引き継いでしまいます。一度 Upgrade メソッドを呼んだら、それ以降はバージョンアップしない限り呼ばないようにしたいのですが、その判断はどのようにするものなのでしょうか?Upgrade メソッドから作成される user.config ファイルが存在するかどうかを判定する以外の方法はありますでしょうか?
ダッチ http://youryella.wankuma.com/
回答
- アップグレードしたかどうかのフラグをuser.configの設定内に作っておくとか
Partial Friend NotInheritable Class TestSetting Inherits System.Configuration.ApplicationSettingsBase Public Sub New() MyBase.new() If (IsVersionDefault) Then 'IsVersionDefaultプロパティがTrueだったらアップグレード Upgrade() 'アップグレードしたことを確定させる Me.Item(STR_IsVersionDefault) = False CType(Me, System.Configuration.ApplicationSettingsBase).Save() End If End Sub Private Const STR_IsVersionDefault As String = "IsVersionDefault" <System.Configuration.UserScopedSettingAttribute()> _ <System.Configuration.DefaultSettingValueAttribute("TRUE")> _ <System.ComponentModel.Browsable(False)> _ Public Property IsVersionDefault() As Boolean Get Return DirectCast(Me.Item(STR_IsVersionDefault), Boolean) End Get Set(ByVal value As Boolean) Me.Item(STR_IsVersionDefault) = value End Set End Property End Clas
- 回答としてマークダッチ 2009年10月21日 4:02
すべての返信
- アップグレードしたかどうかのフラグをuser.configの設定内に作っておくとか
Partial Friend NotInheritable Class TestSetting Inherits System.Configuration.ApplicationSettingsBase Public Sub New() MyBase.new() If (IsVersionDefault) Then 'IsVersionDefaultプロパティがTrueだったらアップグレード Upgrade() 'アップグレードしたことを確定させる Me.Item(STR_IsVersionDefault) = False CType(Me, System.Configuration.ApplicationSettingsBase).Save() End If End Sub Private Const STR_IsVersionDefault As String = "IsVersionDefault" <System.Configuration.UserScopedSettingAttribute()> _ <System.Configuration.DefaultSettingValueAttribute("TRUE")> _ <System.ComponentModel.Browsable(False)> _ Public Property IsVersionDefault() As Boolean Get Return DirectCast(Me.Item(STR_IsVersionDefault), Boolean) End Get Set(ByVal value As Boolean) Me.Item(STR_IsVersionDefault) = value End Set End Property End Clas
- 回答としてマークダッチ 2009年10月21日 4:02
- gekka さん、回答ありがとうございます。user.config にアップグレードのフラグを設ける方法があったんですね。IsVersionDefault プロパティに NoSettingsVersionUpgrade 属性も追加で設定すれば、何度バージョンアップしても必ず一回だけ Upgrade メソッドを呼ぶことができそうです。Upgrade メソッドを呼ぶ手順としては、次のようにすれば良さそうですね。1. Reload メソッドで一回設定を読み込んでみる。2. IsVersionDefault プロパティをチェックし、バージョンアップしている場合は Upgrade メソッドを呼び、IsVersionDefault プロパティをバージョンアップしたフラグを立てて、Save メソッドを呼ぶまた初めてアプリケーションを起動するときでも Upgrade メソッドが例外を返すことがないので、gekka さんの教えてくださった方法で対応できそうです。ありがとうございました。もし、この他の方法で対応している情報をお持ちの方がいらっしゃいましたら教えてください。
ダッチ http://youryella.wankuma.com/


