ClickOnceでアプリケーション設定が保存されない問題への対応策(app.config,user.config)

うちの会社でやってるCVPOSはClickOnceで配布しているわけですが、
ClickOnceのアプリケーションが新しくなると、通常はユーザ設定も
自動で引き継がれるわけです。
現在50台ぐらいのPOSレジがCVPOSで稼働してるうちの、
どういうわけかある店舗で設定が以前のものに戻っているという
現象が数回発生しました。
これ、前にもちらっと聞いてテストしてみたんですが、
再現できずペンディングになっていた事項です。
前は再現できなかったのですが、試しにI君の端末でテストしてみると、
まさに店舗から言われたような現象が再現したのです。

再現したのなら調査ができるということで、まずは
...Settings.Default.UpGrade()を強制的に行う処理を入れてみました。
...が、結果は同じです。

その後数時間ほど調査して以下のようなことがわかりました。

  • ClickOnceのバージョンが上がる場合

C:\Users\(ユーザ名)\AppData\Local\Apps\2.0\...以下のサブフォルダに
アプリケーションファイルがコピーされる。
manifestsサブフォルダにアプリケーションの情報
(拡張子cdf-msとmanifest)が作成される。

  • アセンブリ情報」-「ファイルバージョン」が上がる場合

C:\Users\(ユーザ名)\AppData\Local\Apps\2.0\Data以下のサブフォルダ以下、
cvne..tion....などのフォルダの下Dataフォルダに新しくフォルダが作成される。
例えば2.2.0.8、2.2.0.9、2.2.0.10など。(ファイルバージョンと同じ)


...そして、ClickOnceのバージョンが上がったときに
設定を引き継ごうとするのですが、
...Settings.Default.UpGrade()は、
ファイルバージョンの一個前の設定を見ようとするらしい。

ゆえに、ClickOnceのversionだけが上がり、
ファイルバージョンが複数存在する端末は、
設定が消え
以前のファイルバージョンの
内容に戻されてしまう!

ということらしい。
この辺りの仕様がどうなってるのか、MSDNを見てみても詳しく書いてない。
ググってもそれらしい情報もない。
もしこの件に関する情報があれば是非教えて下さい!!!

しかし今回の調査から、

設定を確実に引き継ぐには
ファイルバージョンも
同時に上げる

ということが必要だとわかった。



MEMO(PageViewCounter:155583)