app.config(web.config)の裏にあるもの

.NET標準のアプリケーション設定ファイル、と言うと
「app(web).config(コンパイル後はxxx.exe.config)」
になるかと思います。


じゃあそのファイルを作らなかったら、
作っても自前のセクションしか使わなかったら、
どういう設定が内部で行われるのか?


今まであまり考えたことがなかったのですが
seasar-dotnetのMLで指摘を受けたのでちょっとだけ
調べてみました。


ASP.NET 構成ファイルの階層と継承
一部を抜粋します。


すべての .NET Framework アプリケーションは、
systemroot\Microsoft .NET\Framework\versionNumber\CONFIG\Machine.config ファイルから
基本構成設定と既定の設定を継承します。
Machine.config ファイルは、サーバー全体の構成設定のために使用されます。
これらの設定の一部は、階層内の下位の構成ファイルでオーバーライドできません。

.NET クライアント アプリケーション
(コンソール アプリケーションおよび Windows アプリケーション) は
、ApplicationName.config という構成ファイルを使用して、
継承した設定をオーバーライドします。
ASP.NET アプリケーションは、Web.config という構成ファイルを使用して、
継承した設定をオーバーライドします。

MSDNには上記のように書かれています。
例えばapp.configには「connectionString」というDBへの接続文字列を
書くための要素があるのですが、app.configを用意しなかったり、
用意してもconnectionStringを使わなかった場合は
machine.configというファイルに書かれた設定が暗黙に使われるようです。


↓machine.configの一部


(中略)

(中略)



SQLServerをインストールしてconnectionStringの設定を使って
接続しようとすると、以下の設定を書いておいてやらないと
使い方によっては意図していないところに
つなぐことになってしまうのですが、
何故この設定が必要なのかは
このmachine.configの中身を見ると納得できます。


他にもこんな設定がありました。











恐らくここに書かれているプロバイダ以外のもの(MySQLとか)を使いたい場合は
自前でDbProviderを追加してやる必要があり、
逆にここに書かれているプロバイダを使う場合は
machine.config上の設定の影響を受けてしまう可能性があります。


他にも色々なことが記述してあり、
.NETではどんなことが標準で設定されて
どんなことを自前で用意しなければいけないのか?
という情報を垣間見ることができそうです。