- PR -

app.configの参照先について

投稿者投稿内容
ぶち
常連さん
会議室デビュー日: 2006/02/15
投稿数: 29
投稿日時: 2007-08-20 11:49
こんにちは。
いつも参考にさせていただいてます。

app.configは通常、EXEと同じフォルダに設定していますが、
もし、EXEと同じフォルダに存在しない場合は、
どこのapp.configを参照するのでしょうか?

今、app.configをEXEと同じフォルダから削除して
EXEを実行したのですが、予想では起動できないかなと
思ったのですが正常に起動しました。

そこでもう一度、EXEと同じフォルダにapp.configを
戻して起動した場合も正常に起動したのですが、
EXEと同じフォルダにapp.configの値を変更しても
反映されません。
どこか別で設定されている値を参照しているのでしょうか?

環境は
VB.NET2005
Windowsアプリケーション
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-08-20 12:29
http://msdn2.microsoft.com/ja-jp/library/ms229689(VS.80).aspx
通常のexeであれば、同じディレクトリのxxxx.exe.configです。
引用:

ぶちさんの書き込み (2007-08-20 11:49) より:
今、app.configをEXEと同じフォルダから削除して
EXEを実行したのですが、予想では起動できないかなと
思ったのですが正常に起動しました。


アプリケーション構成ファイルは無くても起動できます。
引用:

ぶちさんの書き込み (2007-08-20 11:49) より:
EXEと同じフォルダにapp.configの値を変更しても
反映されません。


それはexeを起動したままアプリケーション構成ファイルを書き換えていませんか?
exeを再起動してみてください。
ぶち
常連さん
会議室デビュー日: 2006/02/15
投稿数: 29
投稿日時: 2007-08-20 13:17
一郎さん返信ありがとうございます。

補足で説明しますと、app.config(xxxx.exe.config)の中で
DBの接続情報を指定しています。
起動時にDBへ接続しますのでapp.configから接続情報を取得できないと
起動に失敗するはずです。

EXEの再起動を行っても状況は変わりません。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-08-20 15:04
確認です。
コード:
プロジェクト
  +-- bin
  |   +-- XXX.exe
  |   +-- XXX.exe.config
  |
  +-- app.config


とあった場合に XXX.exe.config を書き変えた後
ビルドすると app.config の内容で XXX.exe.config が置き換わりますが大丈夫ですよね。

app.config のほうが優先度が高いですが、見つからなかったら machine.config の値を使います
app.config から値が取れない場合何らかの値を使うようなプログラミングをしてたりしませんよね。

設定ファイルから値を取得している部分とデータベースに接続文字列を出力している部分でメッセージボックスなどを出して確認してみてはどうでしょうか?
_________________
かるあ のメモスニペット
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-08-20 15:05
ほう、それは不可思議現象ですね。

ではexe(と必要なdll)ファイルのみをどこか別の場所にコピーして実行してみましょう。
これでDBの接続情報を取得できなくなるはずですよね。

----------
うお、かるあさんと同タイミング。

[ メッセージ編集済み 編集者: 一郎 編集日時 2007-08-20 15:07 ]
ぶち
常連さん
会議室デビュー日: 2006/02/15
投稿数: 29
投稿日時: 2007-08-20 15:43
引用:

かるあさんの書き込み
とあった場合に XXX.exe.config を書き変えた後
ビルドすると app.config の内容で XXX.exe.config が
置き換わりますが大丈夫ですよね。



はい、その辺りは理解しています。

conString = "User Id=" & My.Settings.DB_USERID & ";Password=" & My.Settings.DB_PASSWORD & ";Data Source=" & My.Settings.DB_DATASOURCE

としていますので設定とDBの接続文字の作成はほぼ同じときにおこなっています。

引用:

一郎さんの書き込み
ではexe(と必要なdll)ファイルのみをどこか別の場所に
コピーして実行してみましょう。
これでDBの接続情報を取得できなくなるはずですよね。



実行してみましたが、状況はかわらずapp.config(xxxx.exe.config)が
同じディレクトリに存在しなくても実行できます。

一度、マシンを再起動してみたのですが、状況はかわらずです。
いったいどこのconfigファイルを参照しているのか不思議です。。。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-08-20 16:37
詳しく知らないんですがSettingsはMachine.configも参照するのかな。でもPasswordは入ってないか。。
My.Settingsって、実はベタ書きだったということはないですよね。。
ぶち
常連さん
会議室デビュー日: 2006/02/15
投稿数: 29
投稿日時: 2007-08-20 16:59
べるさん、返信ありがとうございます。

引用:
べるさんの書き込み
詳しく知らないんですがSettingsはMachine.configも参照するのかな。
でもPasswordは入ってないか。。
My.Settingsって、実はベタ書きだったということはないですよね。。



Machine.configはみてみましたが、特にDBの接続文字の設定はありませんでした。

My.Settingsのベタ書きってどんな状態をいうのでしょうか?

VisualStudioからデバックしているときはアプリケーションの設定で
値を変更すると反映されていました。
運用環境と同じようにEXEとDLLをコピーして実行すると問題が発生します。

スキルアップ/キャリアアップ(JOB@IT)