105

ファイルの場所をカスタマイズしようとしていuser.configます。現在、ハッシュとバージョン番号とともに保存されています

%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\

アプリケーションのバージョンにとらわれないようにしたい

%AppData%\[CompanyName]\[ProductName]\

これはどのように行うことができますか?どのような影響がありますか? アップグレード後、ユーザーは以前のバージョンの設定を失いますか?

4

4 に答える 4

82

将来この問題が発生した場合の参考として、この引用テキストを追加したいと思いました。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がこの機能を提供する方法はありませんが、方法はまったく同じです.

于 2009-12-18T12:50:51.077 に答える
5

(これを@Amrの回答にコメントとして追加しますが、まだそれを行うのに十分な担当者がいません。)

MSDN の記事の情報は非常に明確で、今でも当てはまるようです。ただし、SHA1 ハッシュがより一般的な base 16 ではなく、base 32 でエンコードされて書き出されることは言及されていません。

使用されているアルゴリズムは に実装されていると思いますToBase32StringSuitableForDirName。これは、Microsoft Reference Source に記載されています

于 2014-10-21T18:46:45.823 に答える