0

サーバーからアプリケーションのバージョンをチェックし、ユーザーに更新を促すための小さなテスト プロジェクトがあります。System.Versionのタイプをto に保存できないことを除いて、すべて正常に動作しMy.Settingsます。(ユーザーが再度通知しないように要求した場合に備えて、新しいバージョンを保存したいと思います。)

今、私はバージョンを文字列として保存し、それを前後に変換できることを知っていSystem.Versionます. ただし、バージョンを保存する代わりに、XML エントリ「バージョン」を値なしで保存するだけです (以下を参照)。

VB.NET、VS 2013、.NET 4 を使用しています。

確認するコードを次に示します。

設定.デザイナー.vb

<Global.System.Configuration.UserScopedSettingAttribute(),  _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute()>  _
Public Property DoNotRemindVersion() As Global.System.Version
    Get
        Return CType(Me("DoNotRemindVersion"),Global.System.Version)
    End Get
    Set
        Me("DoNotRemindVersion") = value
    End Set
End Property

割り当て例

If My.Settings.DoNotRemind Then My.Settings.DoNotRemindVersion = oVersion.NewVersion

(oVersion.NewVersionはタイプSystem.Versionです。)

user.config に保存されているとおり

<setting name="DoNotRemindVersion" serializeAs="Xml">
    <value>
        <Version xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
    </value>
</setting>

それで、私は何を間違っていますか?クラスをシリアル化してユーザー設定に保存する必要があるという投稿をいくつか読みましたが、これは単純なバージョン番号であり、一見すると、サポートされているデータ型であると予想されます。

4

1 に答える 1

2

System.Versionクラスは でマークされていますが、 SettingsSerializeAsAttributeSerializableAttributeでプロパティをマークし、 System.Configuration.SettingsSerializeAs.Binary値を渡す必要があります。

プロジェクト設定デザイナー インターフェイスを使用して、ファイルで見つかったようなコードを自動的に生成することはできませんSettings.designer.vb。My Namespace - MySettings クラスを自分で拡張する必要があります。これは、部分クラスが役立つ領域の 1 つです。

プロジェクトに新しいクラス ファイルを追加し、CustomMySettings のようなクリエイティブな名前を付けます。この新しいファイルで自動生成されたコードを選択して削除し、次のコードに置き換えます。

Namespace My
    Partial Friend NotInheritable Class MySettings
        ' The trick here is to tell it serialize as binary
        <Global.System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)> _
        <Global.System.Configuration.UserScopedSettingAttribute(), _
        Global.System.Diagnostics.DebuggerNonUserCodeAttribute()> _
        Public Property DoNotRemindVersion() As Global.System.Version
            Get
                    Return CType(Me("DoNotRemindVersion"), Global.System.Version)
            End Get
            Set(value As Global.System.Version)
                    Me("DoNotRemindVersion") = value
            End Set
        End Property
    End Class
End Namespace

My.Settings.DoNotRemindVersionこれにより、デザイナーを介して設定を作成した場合と同じように使用できます。設定に初めてアクセスしたときは、null (Nothing) 値が含まれているため、Form.Load イベント ハンドラーで次のように初期化する必要があります。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim savedVersion As Version = My.Settings.DoNotRemindVersion
    If savedVersion Is Nothing Then
        My.Settings.DoNotRemindVersion = New Version(1, 0)
        My.Settings.Save()
    End If
End Sub
于 2017-05-10T02:29:34.110 に答える