52

settings.settings を使用してユーザー固有の設定 (scope=User) を保存するアプリケーションを作成しました。設定は起動時に正しくロードされ、使用中に変更され、次回の起動のために正しく保存されます。このサイクルは問題ないようです。

新しいビルドのアセンブリとファイルのバージョンを更新すると、問題が発生します。起動時に設定が読み込まれなくなりました (代わりに、デフォルト値が使用されます)。また、バージョン 1.1 から保存された構成ファイルは、バージョン 1.2 が起動され、新しい構成ファイルが生成されて保存された場合でも保持されるようです (つまり、バージョン 1.1 を再起動すると、構成ファイルはそれから保存された構成ファイルになります)。バージョン)。

そのため、設定はアセンブリやファイルのバージョンに固有のもののようです。また、バージョン 1.1 とバージョン 1.2 の間で、settings.settings ファイルなどに変更がなかったことも注目に値します (つまり、これらの異なるビルド間で行った唯一の変更はバージョン番号の変更でした)。

バージョンの変更後もこれらの設定を保持する方法はありますか?

4

3 に答える 3

72

いくつかの説明:

派生クラスのUpgradeメソッドを呼び出す必要があります (通常は呼び出され、Visual Studio によって作成されます)。ApplicationSettingsBaseSettings

Properties.Settings.Default.Upgrade();

メソッドをいつ/どこで呼び出すUpgradeか? 適用できる簡単なトリックがあります: UpgradeRequired(例)というユーザー設定を定義しますbool(最も簡単な方法は IDE を使用することです)。デフォルト値が であることを確認してくださいtrue

アプリケーションの開始時に切り取った次のコードを挿入します。

  if (Properties.Settings.Default.UpgradeRequired)
  {
      Properties.Settings.Default.Upgrade();
      Properties.Settings.Default.UpgradeRequired = false;
      Properties.Settings.Default.Save();
  }

そのため、 Upgrade メソッドは、バージョンが変更された後にのみ呼び出され、1 回だけ呼び出されます (UpgradeRequired = falseバージョンが変更されるまで (プロパティがデフォルト値の に戻るまで) を設定して、それ以上のアップグレードを無効にしているためtrue)。

于 2010-04-23T12:13:24.050 に答える
30

Markus Olsson はすでにここでかなり良い答えを出しています。

基本的に、 ApplicationSettingsBase.Upgrade()メソッドを使用する必要があります。

于 2010-03-23T07:38:52.810 に答える
2

他の誰かがより良い答えを持っていることを願っています。数年前にこの質問がありましたが、私が見つけた (うまくいった) 唯一の解決策は、既定の組み込みの .NET の方法ではなく、独自のメカニズムを使用して設定を保存することでした。

于 2010-03-21T01:29:01.697 に答える