2014/10/11

【C#】csc.exeでコンパイルするときにConfigファイルを読み込む

Visual Studioで開発すると、同じプロジェクト内にapp.configというファイルを追加すれば、何も考えずにConfigurationManagerを使ってConfigファイルにアクセスすることができる。

しかし、テキストエディタや、QuickSharp(QuickSharpについて)で開発したりすると、そもそもソリューションやプロジェクトファイルが作られないので、明示的にConfigファイルを読み込まなければならない。



Configファイルを読み込む



Configファイルを読み込むには、以下のような処理が必要。
using System.Configuration;
System.Diagnostics;

var configs = new Dictionary<string, string>();

// Configファイルを読み込む
ConfigurationManager.OpenExeConfiguration(@Process.GetCurrentProcess().MainModule.FileName);
// ConfigファイルをDictionaryに突っ込む
foreach (var key in ConfigurationManager.AppSettings.AllKeys)
{
    configs[key] = ConfigurationManager.AppSettings[key];
}

Console.WriteLine(configs["hoge"]);

OpenExeConfigurationには、注意すべき点がある。
// エラーになる
var c = ConfigurationManager.OpenExeConfiguration(@"app.config");

// エラーになる
var c = ConfigurationManager.OpenExeConfiguration(@"app");

// これが正解
var c = ConfigurationManager.OpenExeConfiguration(@"csharp.exe");

// C:\csharp.exe.config と表示される
Console.WriteLine(c.FilePath);

OpenExeConfigurationの引数には、実行ファイルのパスを渡す必要がある。
そのため、Configファイルは「app.config」ではなく「○○.exe.config」という名前でなければならない。

Visual Studioしか使ってこなかったので、てっきり「app.config」でイケる思ったが、よくよく考えてみるとbin\debugbin\releaseの中のConfigファイルは「○○.exe.config」になっているのを思い出した。

ちなみに、Process.GetCurrentProcess().MainModule.FileNameが実行ファイル名の取得する方法。



参考



以上

written by @bc_rikko

0 件のコメント :

コメントを投稿