1. ホーム
  2. シーピー

c#App.config,ConfigurationManager の読み込みと書き込み。

2022-02-27 04:43:50
<パス

アプリケーションには、バージョン番号やデータベースへの接続文字列など、何らかの設定情報を書きたいことがよくあります。WinFormアプリケーションでProperties.Settingsを使って同様のことができることはご存知かと思いますが、実際にはApp.configという設定ファイルを利用します。
この記事では、コード内でApp.configにアクセスする方法を探ります。App.configの使用方法は、上記の使用方法よりもはるかに複雑なので、最も基本的なappSettingsの設定部分のみを説明します。

I. 設定ファイルの概要

アプリケーション設定ファイルは、大文字と小文字が区別されるXMLタグと属性を持つ標準的なXMLファイルです。これはオンデマンドで変更可能であり、開発者はアプリケーションを再コンパイルすることなく、設定ファイルを使用して設定を変更することができます。設定ファイルのルートノードはconfigurationです。私たちはしばしばappSettingsにアクセスしますが、これは.NETによる事前定義された設定セクションです。私たちがよく使う設定ファイルのアーキテクチャは、以下のゲストポストのような形になっています。まずはその印象を掴み、その後に続く例でそのイメージを掴みます。以下の "configuration section" は、XMLを設定するためのノードとして理解することができます。
一般的な設定ファイルのスキーマ
構成セクションと名前空間宣言を含む //Configuration section declaration area (構成セクション宣言領域)
//コンフィギュレーションセクション宣言
//コンフィギュレーションセクションのグループを定義する
//構成セクショングループ内の構成セクション宣言
// 定義済みコンフィギュレーションセクション
//コンフィギュレーションセクション設定エリア
以下は、最も一般的なアプリケーション設定ファイルの1つで、appSettingsセクションのみを記述した例です。


定義済みのappSettingsセクション(大文字と小文字が区別されます)には、"add"という名前の要素と、"key"と"value"という二つの属性がいくつか存在します。
.NETはappSettingsセクションにアクセスする方法を提供します。.NET 1.0 と 1.1 では、System.Configuration.ConfigurationSettings.AppSettings["Key"]を使用して、キー = "Key" の要素の value 属性にアクセスすることが可能です。
注)このConfigurationSettingsプロパティは、.Net FrameWork 2.0では明示的に非推奨となり、ConfigurationManagerまたはWebConfigurationManagerに変更することが推奨されています。
ConfigurationManager を使用するには、プロジェクトに system.configuration.dll アセンブリへの参照を追加する必要があります。(ソリューション・マネージャでプロジェクト名を右クリックし、コンテキスト・メニューの[参照の追加]を選択し、.NETタブの下で見つけます)。
参照を追加した後、ConfigurationManager.AppSettings["Key"]を使用して、対応する値を読み取ることができます。
ただし、ConfigurationManager.AppSettingsのプロパティは読み取り専用で、プロパティ値の変更には対応していません。これは、Microsoftがapp.configファイルに動的に書き込むことを推奨しておらず、手動で設定し、アプリケーションの実行時にのみ静的にアクセスすることを想定しているためです。
どうしてもアプリケーションに変更を加える、つまりApp.Configに書き込む必要がある場合は、下を向いてください。

II. appSettings設定セクションの読み取りと書き込み操作

App.config ファイルの appSettings セクションを読み込む方法は比較的簡単で、System.Configuration.File を使ってアクセスすることができます。ConfigurationManager["Key"]でアクセスできますが、すでに述べたように、そのメソッドは書き込みを提供しません。
設定ファイルに書き込む場合は、ConfigurationManagerオブジェクトを使って設定ファイルを開く操作を行うと、Configurationオブジェクトが返ってくるので、それを使って操作(追加、削除、変更、チェック)を行うことができます。
以下のコードで実装します(using System.Configuration名前空間への参照を追加しています)。

private void AccessAppSettings()
{
    //Get the Configuration object
    Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    // Read the Value of the element according to the Key
    string name = config.AppSettings.Settings["name"].Value;
    //write the Value of the element
    settings["name"].Value = "xieyc";
    //add elements
    config.AppSettings.Settings.Add("url", "http://www.myhack58.com");
    //delete elements
    config.AppSettings.Settings.Remove("name");
    //be sure to remember to save, write config.Save() without parameters as well
    Save(ConfigurationSaveMode.Modified);
    //refresh, otherwise the program reads the previous value (which may have been loaded into memory)
    System.Configuration.ConfigurationManager.RefreshSection("appSettings");
}

一つ注意すべきは
1. 存在しない Key 値に基づいて要素にアクセスしたり、存在しない要素を remove() メソッドで削除したりしても、例外は発生せず、前者は null を返します。
2. 2. 既に存在する要素を追加する場合も例外は発生しませんが、既存の Value と新しい Value を "," で区切って連結します (例: "olldvalue,newvalue").
3. プロジェクトがコンパイルされると、実行ディレクトリのbinDebugeファイルに2つの設定ファイルが現れます。1つは"ProjectName.EXE.config"、もう1つは"ProjectName.vshost. exe.config"という名称のファイルです。最初のファイルは、プロジェクトで使用される実際の設定ファイルで、プログラム実行中に変更されるとそこに保存されます。2番目のファイルは、実際にはオリジナルコードの "App.config" の同期ファイルで、プログラム実行中に変更されることはありません。
4. 4. appSettings 設定セクションなど、大文字と小文字に特に注意してください(XML ファイルは大文字と小文字が区別されます)。
5. 5. 読者の中には、app.configは標準的なXMLだから、一般のXMLファイルを操作するのと同じように、確かに読み書きができると思われる方もいらっしゃるかもしれません。これは確かに可能です! ただし、app.configファイルを提供するのはVSの目的を逸脱していると思うので、自分で設定ファイルを定義したほうが便利だと思います。

この記事では、app.configファイルのappSettingsセクションにアクセスする方法をざっくりと説明します。connectionStringsセクションも基本的には同様で、このセクションをカスタマイズすることも可能です。例えば、WinFormアプリケーションの設定(IDEまたはコードからアクセス可能)は、実際にapp.configファイルを使用しています。