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