将来この問題が発生した場合の参考として、この引用テキストを追加したいと思いました。Upgradeを呼び出すことで、以前のバージョンから設定をコピーするように ApplicationSettings インフラストラクチャに指示できると思われます。
Properties.Settings.Value.Upgrade();
クライアント設定 FAQブログ投稿から: (アーカイブ)
Q: user.config パスにバージョン番号があるのはなぜですか? アプリケーションの新しいバージョンをデプロイすると、ユーザーは以前のバージョンで保存されたすべての設定を失うことはありませんか?
A: user.config パスがバージョンに依存する理由はいくつかあります。
(1) アプリケーションの異なるバージョンのサイド バイ サイド展開をサポートするため (たとえば、Clickonce を使用してこれを行うことができます)。アプリケーションの異なるバージョンでは、異なる設定が保存される可能性があります。
(2) アプリケーションをアップグレードすると、設定クラスが変更され、保存されたものと互換性がなくなり、問題が発生する可能性があります。
ただし、アプリケーションの以前のバージョンから最新のバージョンに設定を簡単にアップグレードできるようにしました。ApplicationSettingsBase.Upgrade()を呼び出すだけ
で、現在のバージョンのクラスに一致する設定を以前のバージョンから取得し、現在のバージョンの user.config ファイルに保存します。設定クラスまたはプロバイダーの実装で、この動作をオーバーライドするオプションもあります。
Q: わかりましたが、アップグレードを呼び出すタイミングはどうすればわかりますか?
A: 良い質問です。Clickonce では、アプリケーションの新しいバージョンをインストールすると、ApplicationSettingsBase がそれを検出し、設定が読み込まれた時点で設定を自動的にアップグレードします。Clickonce 以外の場合、自動アップグレードはありません。自分で Upgrade を呼び出す必要があります。Upgrade をいつ呼び出すかを決定するための 1 つのアイデアを次に示します。
CallUpgrade というブール値の設定があり、デフォルト値の true を指定します。アプリの起動時に、次のようなことができます。
if (Properties.Settings.Value.CallUpgrade)
{
Properties.Settings.Value.Upgrade();
Properties.Settings.Value.CallUpgrade = false;
}
これにより、新しいバージョンがデプロイされた後、アプリケーションが最初に実行されたときにのみ Upgrade() が呼び出されるようになります。
それが実際に機能するとはちょっと信じられません.Microsoftがこの機能を提供する方法はありませんが、方法はまったく同じです.