【C#】【Visula Studio】App.config の扱いについて [2]

■ はじめに

 * 以下の構成のようにプロジェクトにまたがり、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];
    }
}

関連記事

App.config の扱いについて [1]

https://blogs.yahoo.co.jp/dk521123/19116010.html