Visual Studio デベロッパー センター > Visual Studio フォーラム > Visual Studio 共通 フォーラム > ApplicationSettingsBase.Upgrade メソッドを呼ぶ判断をするには
質問する質問する
 

回答済みApplicationSettingsBase.Upgrade メソッドを呼ぶ判断をするには

  • 2009年10月21日 1:39ダッチ ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    Visual Studio 2008
    Windows Forms アプリケーション

    こんにちは、ダッチです。

    ApplicationSettingsBase クラスを使用してアプリケーションの設定(ユーザースコープ)の読み書きをしています。
    設定を読み書きすることはできたのですが、アプリケーションをバージョンアップしたときに、設定を引き継ぐために呼ぶことになる Upgrade メソッドを呼ぶ判断方法がわかりません。

    アプリケーション起動時に毎回呼んでしまうと、毎回前のバージョンの設定を引き継いでしまいます。

    一度 Upgrade メソッドを呼んだら、それ以降はバージョンアップしない限り呼ばないようにしたいのですが、その判断はどのようにするものなのでしょうか?

    Upgrade メソッドから作成される user.config ファイルが存在するかどうかを判定する以外の方法はありますでしょうか?

    ダッチ http://youryella.wankuma.com/

回答

  • 2009年10月21日 3:27gekka ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済みコードあり
    アップグレードしたかどうかのフラグを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
    •  

すべての返信

  • 2009年10月21日 3:27gekka ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済みコードあり
    アップグレードしたかどうかのフラグを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
    •  
  • 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/