2006年10月19日

My.Settingsの内容はどこに保存されるのか。

今まで不思議に思っていたのは、app.config内のMySettingsセクションに更新した内容が保存されるのものと思っていたのにファイルのタイムスタンプを見てもインストール時と全く同じままなので一体どこに保存されているのだろうかということだった。
いろいろ調べてみたところ、Documents and Settings\(LoginUser)\Local Settings\Application Data\(会社名)\(アプリ名)\(アセンブリバージョン)\
内にuser.configというファイルに保存されていることが判った。(下図)

格納場所

user.configのなかみ
user.config

※このことで、前Tipsで一部不正確なところがありました。
アセンブリバージョンが変わるとアプリケーション設定(app.config)のMy.Settingsの内容が初期化されると説明しましたが、正しくはアセンブリバージョン別に設定(user.config)が管理されているために結果として初期化され、バージョンを戻すと該当バージョンの設定を再び読み込むようになっています。
posted by なっちゃん at 17:18| 静岡 ????| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

VB2005 アプリケーション設定(app.config)とアセンブリバージョンの関係

前回、INIファイルに変わる環境設定の保存方法としてMy.Settingsオブジェクトを紹介した。前々回では、自アプリケーションのバージョン取得について紹介した。

今回のTipsでは、この2つのTipsが関係するちょっと困った現象とその回避策をとりあげる。

この現象に気付いたのは出来上がったプログラムを納品したときだった。
バグが見つかったため修正してプログラム本体だけをコピーして起動させたところ、修正箇所とは関係ないところでエラーを起こした。
原因はMy.Settingsオブジェクトで管理している設定内容がきれいさっぱり消えていたためである。なぜクリアされたのか。いろいろ調べた結果アセンブリバージョンを変更するとMy.Settingsの全項目が初期化されることを発見した。さらに、アセンブリバージョン情報にはAssemblyVersionAssemblyFileVersionの2つがあり後者のAssemblyFileVersionを変更してもMy.Settingsの内容は初期化されないことも判った。

顧客に最新版であることを示す目的でフォームにバージョン情報を表示させているのだが、この情報が前々回Tipsで紹介したMy.Application.Info.VersionではAssemblyVersionの方なのである。このため、バージョンを変更するたびに毎回環境設定を行わなくてはならないことになってしまう。これでは使い勝手が悪すぎるのでフォーム上のバージョンにはAssemblyFileVersionを表示させ、AssemblyVersionは変更しないようにすることにした。

アセンブリ情報ダイアログ
アセンブリ情報

ファイルのプロパティ
ファイルのプロパティより

サンプルプログラムの画面とソース
サンプル画面

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Label1.Text = "AssemblyVersion : " & _
My.Application.Info.Version.ToString
Label2.Text = "AssemblyFileVersion : " & _
Application.ProductVersion.ToString
End Sub
posted by なっちゃん at 15:07| 静岡 ????| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2006年10月03日

INIファイルに代わるVB2005のアプリケーション設定値の保存

以前に「INIファイルの読み書き」をVB6とVB.NETの比較で紹介したが、VB2005になってこれに代わるとっても楽な方法が追加されたので紹介する。
あまりに楽チンなのでINIファイルを使うことはもう無いだろうと思うほどだ。
VB.NETでもそれに類するものはあったが扱いが面倒だった。それがVB2005になってからは、まるでプロパティを設定するのと同じ感覚でできるのでつい利用したくなってしまう。

1.サンプル画面(TextBoxとCheckBoxの内容を保存)
サンプル画面

2.TextBoxのプロパティから(ApplicationSettings)の(PropertyBinding)を選択
プロパティ画面

3.規定値のTextプロパティのほかいろんなプロパティを保存できる
アプリケーション設定値を指定

4.「新規」から設定名(Name)を入力する
設定名称を入植

5.CheckBoxの場合はCheckedプロパティを指定
CheckBoxの場合

6.設定値はapp.configに記録される
app.configの記述

以上で設定は完了。ほかに何もしなくとも入力した値は保持され、次回起動時にはちゃんと反映されているという優れものである。

が、従来の「登録」や「キャンセル」ボタンを使う場面もまだ多いので、それに対応させる方法も紹介する。

'/// 登録をクリック ///
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnSave.Click
'-- ここで強制的に登録しなくても終了時に自動で保存される
'My.Settings.Save()
Me.Close()
End Sub
 
'/// キャンセルをクリック ///
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnCancel.Click
'-- 入力内容を破棄したい場合は、再読込みする
My.Settings.Reload()
Me.Close()
End Sub
 
設定内容をコードで確認するには My.Settingsに続いて設定名を指定する。
My.Settings.txtName
My.Settings.chk20
posted by なっちゃん at 15:13| 静岡 ??| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする