web-dev-qa-db-ja.com

.settings / .configファイルの変更をファイルバージョンの変更全体で永続化するにはどうすればよいですか?

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

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

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

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

44

Markus Olssonはすでにかなり良い答えを出している here

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

25
VoidDweller

いくつかの明確化:

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

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のデフォルト値に戻るまで)。

63
splattne

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

2
Andy Jacobs