【C#】App.Config 再読み込み方法

スポンサーリンク

あるソフトで、アプリケーション構成ファイル[App.config](コンパイル後は[exe名.exe.config])の読み込みを作ってたわけ。
『configファイルを書き込んだ後、再読み込みしても書き込み前の数値』になってしまうし。。。

ソフトの再起動すれば、ちゃんと読み込めてたから。。。
書き込みも読み込みもおかしくないって事なので、どうやって解決したか、今日はメモしたいと思います。

前提として。。。

『App.configは、アプリケーション構成ファイル』である。
その為、前提としては、起動する為の最初の1回だけ読み込む為にあると思われる。
(それでも僕は、再度読み込みたい。。。)

サンプルアプリケーション作成

まずは、簡単なサンプルを作りたいと思います。
そして、読み書きマスターになってやろうと思います!!

操作画面

TxtAppKeyのテキストボックスに入力されている文字列に対して、読み書きを実施します。
読込、書き込みはそれぞれのボタンクリックイベントで対応します。

設定

参照設定の追加[System.Configuration]

まずは、App.configを読み書きできるように参照設定の追加をします。

追加する手順は下記の通り

[参照]→[参照の追加]

[System.Configuration]にチェックを入れて、[OK]

参照の一覧に追加されていることを確認する。

NameSpaceの定義

参照設定に追加されたので、usingで使用する事を明記する。

using System.Configuration;

App.configにKeyとValueを追加

ソリューションエクスプローラーにある[App.config]を選択し、下記内容を追加する。

<appSettings>
	<add key="SampleKey" value="育児"/>
</appSettings>

ここでは、新たに[appSettings]というセクションを作成し、addを使用し、KeyとValueを設定する。
サンプルでは、『Key=”SampleKey”であり、Value=”育児”』となる。

Configファイルを読み込む

読込ボタンのクリック処理を紹介する。

private void BtnRead_Click(object sender, EventArgs e)
{
    //読込
    LblReadValue.Text =
        ConfigurationManager.AppSettings[TxtAppKey.Text].ToString();
}

Configファイルを書き込む

書込ボタンのクリック処理を紹介する。

private void BtnWrite_Click(object sender, EventArgs e)
{
    //instance取得
    Configuration config = 
        ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

    //書き込み
    config.AppSettings.Settings[TxtAppKey.Text].Value = TxtWriteValue.Text;

    //保存
    config.Save();
}

結果

書き込み後、読み込みしても、変化がない。。。
ただソフトを再起動後、読込ボタンを押すと、ちゃんと前回の書込ボタンの内容はファイルに書き込まれているようだ。

Configファイルを再読み込みする事がある場合は。。。

再読み込みしたい場合は、セクションを更新する必要がある。
どこでも問題ないかもしれないが、読み込みの時にセクションを更新できるように追加する。

private void BtnRead_Click(object sender, EventArgs e)
{
    //再読み込み出来るようにセクションを更新する
    ConfigurationManager.RefreshSection("appSettings");

    //読込
    LblReadValue.Text =
        ConfigurationManager.AppSettings[TxtAppKey.Text].ToString();
}

結果 その2

書き込み後に、読込ボタンを押したら、ちゃんと書き込んだ内容を読み込むことが出来ました

まとめ

今回はアプリケーション構成ファイル(App.config)の『読み書き』と『再読み込み』について紹介しました。
起動時にApp.configは内部的に保持されており、再度セクションを読み込み出来るようにする必要があるようです。
意外と困っている人がいましたが、的を得た回答がなくて困っていました。。。
関数を見てたら、使えそうなものを見つけ、実際に使ってみたら、ヒットしたのでラッキーでした。

実際にコンパイルが終わった後は、(Exeファイル名).exe.configファイルを読み込むことになります。
今回のサンプルの場合、実行ファイル(blog_config.exe)を実行した際、同じ階層にあるconfigファイル(blog_config.exe.Config)を読み込みます。

コメント

タイトルとURLをコピーしました