トップ回答者
user.configファイルのパスについて

質問
-
visual basic 2013 expressでWindows desktopアプリを作成しています。
exeファイル実行終了後に変数の保存を行い、exeファイル再実行時に保存した変数値を読み込もうと試みております。
これを実現する為に、アプリケーション設定を行っています。
[MyProject]から[設定]タブにてtest変数をスコープ=ユーザー、値=0で保存し
以下のコードのような記述を行っております。
Public test As Integer = My.Settings.test Public Class Test_Class Private Sub testbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles testbutton.Click test += 1
My.Settings.Save() End Sub End Class
本来であればexeファイルを終了時に値を保存し、exeファイル再実行時には前回の値からカウントアップを再開するはずですが、test変数はexeファイルを立ち上げるたびに初期値の「0」にリセットされているようです。
[MyProject]→[設定]→[同期]を押すと「次の場所でuser.configファイルは見つかりませんでしたC:\Users\<username>\AppData\Local\<companyname>\<appdomainname>_<eid>_<hash>\<virsion>」といった警告文が表示されますので、user.configファイルが別の場所に保存されているか、作成されていないようなのですがどのように対処したら良いでしょうか。
回答お願い致します。
---追記---
実際にC:\Users\<username>\AppData\Local\を確認したところ<companyname>フォルダが作成されておりませんでした。
アセンブリ情報にて会社名等指定しております。(関係ないかもしれませんが、全角文字使用が不安だった為念のため全て半角英数字での記述を行っております。)
- 編集済み visual_basic_study 2015年3月27日 2:28
- 移動 星 睦美 2015年3月27日 4:14 .NET Framework 全般 から
回答
-
こんにちは。
設定ファイルへの反映をせずにSaveしているからということは無いですか?(コードを見た限りですが)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click test += 1 My.Settings.test = test 'add My.Settings.Save() End Sub
- 回答としてマーク visual_basic_study 2015年3月29日 23:53
-
user.configファイルはアプリケーション実行中、必要になったタイミングで自動的に作成されます。その際にディレクトリ等も作成されるため特に心配することはありません。
その上で、Visual Basic IDE上にある[同期]機能についてですが、上述のようにアプリケーションを実行中に保存されてしまうものですから、アプリケーション実行開始時の初期値を再現するために設定をリセットする機能です。実行前などリセットされるべき設定がなければ気にする必要はありません。
# なお、[同期]機能はVisual Basic専用の機能ですので.NET Framework全般は不適切です。オペレーターの方はフォーラム移動していただけたらと。
- 回答としてマーク visual_basic_study 2015年3月29日 23:53
-
C#でもVBでも、Saveメソッドによって、その時点でuser.configファイルを保存することができます。VBはそれに加えて、アプリケーション終了時に、user.configファイルを自動的に保存する機能があります。言ってみれば便利機能です。この便利機能はデフォルトでオンになっていますが、オフにすることもできます。オフにするには、プロジェクトのプロパティの「アプリケーション」タブの、「シャットダウン時に、My.Settingsを保存する」のチェックを外します。
おそらく今回の問題は、Tak1waさんが書かれているように、単にMy.Settingsに書き戻していないだけのような気がします。試してみましたが、My.Settingsに書き戻さない場合、Saveメソッドを実行しても、user.configファイルは作成されませんでした。
また、参考として、My.Settingsに書き戻しても、事前にSaveメソッドでuser.configを更新しておくと、アプリケーションのシャットダウン時に再度保存されることはありませんでした。以上から、いずれにしてもMy.Settingsに変化があった場合のみ、user.configファイルを作成、もしくは更新するようです。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク visual_basic_study 2015年3月29日 23:53
すべての返信
-
こんにちは。
設定ファイルへの反映をせずにSaveしているからということは無いですか?(コードを見た限りですが)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click test += 1 My.Settings.test = test 'add My.Settings.Save() End Sub
- 回答としてマーク visual_basic_study 2015年3月29日 23:53
-
user.configファイルはアプリケーション実行中、必要になったタイミングで自動的に作成されます。その際にディレクトリ等も作成されるため特に心配することはありません。
その上で、Visual Basic IDE上にある[同期]機能についてですが、上述のようにアプリケーションを実行中に保存されてしまうものですから、アプリケーション実行開始時の初期値を再現するために設定をリセットする機能です。実行前などリセットされるべき設定がなければ気にする必要はありません。
# なお、[同期]機能はVisual Basic専用の機能ですので.NET Framework全般は不適切です。オペレーターの方はフォーラム移動していただけたらと。
- 回答としてマーク visual_basic_study 2015年3月29日 23:53
-
C#でもVBでも、Saveメソッドによって、その時点でuser.configファイルを保存することができます。VBはそれに加えて、アプリケーション終了時に、user.configファイルを自動的に保存する機能があります。言ってみれば便利機能です。この便利機能はデフォルトでオンになっていますが、オフにすることもできます。オフにするには、プロジェクトのプロパティの「アプリケーション」タブの、「シャットダウン時に、My.Settingsを保存する」のチェックを外します。
おそらく今回の問題は、Tak1waさんが書かれているように、単にMy.Settingsに書き戻していないだけのような気がします。試してみましたが、My.Settingsに書き戻さない場合、Saveメソッドを実行しても、user.configファイルは作成されませんでした。
また、参考として、My.Settingsに書き戻しても、事前にSaveメソッドでuser.configを更新しておくと、アプリケーションのシャットダウン時に再度保存されることはありませんでした。以上から、いずれにしてもMy.Settingsに変化があった場合のみ、user.configファイルを作成、もしくは更新するようです。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク visual_basic_study 2015年3月29日 23:53