[.NET] Application のConfigurationのファイル入出力

Windows FormsではApp.configがあり、Application.Settingsクラスによりサポートされている。Visual StudioではSettingsの保存項目を決めるためのデザイナ画面もあったそうだ。
.NETではApp.configではなく、複数のconfigファイルを使い分けて、ユーザー固有の情報(マシンが変わっても良い)と、マシン固有情報(ユーザーには共通)などを共通の仕組みによりアクセスできるようにしている。そのためのコントローラー的なクラスがConfigurationManager。

ConfigurationManagerクラス

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx

MSDNのこのエントリにはVisual Studio用のプロジェクトへのリンクが張ってある。このプロジェクトはそのままビルドすることができる。ソースコードを見ながら理解したほうが早い。というか、このソースコードがないとドキュメントだけから使い方を理解することは難しいように思える。

このクラスはいくつもの関係したクラスを使いこなさなければならない、という欠点がある。これを嫌うハッカーたちは自分のソースコード中でXMLを構文解析し、自分の必要な情報を取り出す。そのため、codeproject.comなどに複数のお手製configuration管理クラスが公開されている。

configurationまわりのクラスは、複数のクラスを組み合わせるのでサンプルがないと正しい順番がわかりにくい。「おまじない」と片づけられそうなぐらいだ。
サンプルで言うと以下の数行の最後でconfigファイルへのアクセスを提供するConfigurationインスタンスが手に入る。この例では最初に作るConfigurationインスタンスはroamingの下にあるコンフィグファイルにアクセスするためのもの。

      Configuration roamingConfig =
        ConfigurationManager.OpenExeConfiguration(
         ConfigurationUserLevel.PerUserRoaming);

      ExeConfigurationFileMap configFileMap =
        new ExeConfigurationFileMap();
      configFileMap.ExeConfigFilename =
        roamingConfig.FilePath;

      Configuration config =
        ConfigurationManager.OpenMappedExeConfiguration(
          configFileMap, ConfigurationUserLevel.None);

ConfigurationManagerクラスにはCloseするメソッドがない。SaveやSaveAsはあるのにCloseがないので不安に思ってウェブを探すと同じ不安を持った人が質問していた。

Do you need to “close” .net Configuration
http://stackoverflow.com/questions/6180814/do-you-need-to-close-net-configuration

やはり、Closeはしなくてもよいのか。その代りRefreshを忘れずにする必要がありそうだ。

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。