■ はじめに
* 以下の構成のようにプロジェクトにまたがり、App.configが存在する場合、どの App.config が使用されるか?
■ 結論
いきなり、結論を言うと、
呼び出し元のプロジェクトの「App.config ...(1)」が使用される
サンプルを動かした時の結果
サンプルでForm上のbutton1, button2, button3 どのボタンを押そうと、「App.config ...(1)」が使用された
textBox に「key1」を入力した場合、「WindowsForm1_1」が表示される
textBox に「key2」を入力した場合、「WindowsForm1_2」が表示される
textBox に「key3」を入力した場合、「WindowsForm1_3」が表示される
textBox に「key4」を入力した場合、空文字が表示される
* ConfigurationSettings.AppSettings["keyX"]でも同一の結果。
■ 構成
* WindowsForm プロジェクト(呼び出し元)
+ App.config ...(1)
+ Form1.cs
* ClassLibrary1 プロジェクト
+ App.config ...(2)
+ ClassA.cs
* ClassLibrary2 プロジェクト
+ App.config ...(13)
+ ClassB.cs
■ サンプル
WindowsForm プロジェクト
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="key1" value="WindowsForm1_1" />
<add key="key2" value="WindowsForm1_2" />
<add key="key3" value="WindowsForm1_3" />
</appSettings>
</configuration>
Form1.cs
private void button1_Click(object sender, EventArgs e)
{
this.label1.Text = ConfigurationManager.AppSettings[this.textBox1.Text];
}
private void button2_Click(object sender, EventArgs e)
{
this.label1.Text = ClassLibrary1.ClassA.GetConfigValue(this.textBox1.Text);
}
private void button3_Click(object sender, EventArgs e)
{
this.label1.Text = ClassLibrary2.ClassB.GetConfigValue(this.textBox1.Text);
}
ClassLibrary1 プロジェクト
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="key1" value="ClassLibrary1_1" />
<add key="key3" value="ClassLibrary1_3" />
<add key="key4" value="ClassLibrary1_4" />
</appSettings>
</configuration>
ClassA.cs
public class ClassA
{
public static string GetConfigValue(string key)
{
return ConfigurationManager.AppSettings[key];
}
}
ClassLibrary2 プロジェクト
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="key2" value="ClassLibrary2_2" />
<add key="key3" value="ClassLibrary2_3" />
<add key="key4" value="ClassLibrary2_4" />
</appSettings>
</configuration>
ClassB.cs
public class ClassB
{
public static string GetConfigValue(string key)
{
return ConfigurationManager.AppSettings[key];
}
}