いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

特定の構成ファイルを読み込む (app.config, ConfigurationManager, OpenMappedExeConfiguration, ExeConfigurationFileMap)


アプリを作成している際、通常は既定の構成ファイル (app.config)でいいのですが
たまに別のファイルを構成ファイルとして読み込む必要があったりします。
それに関してのメモです。


別のファイルを構成ファイルとして読み込む際は

System.Configuration.ConfigurationManager.OpenMappedExeConfiguration

メソッドを利用します。OpenExeConfigurationメソッドだと既定の構成ファイルが
読み込まれますので注意してください。


OpenMappedExeConfigurationメソッドは、引数に

System.Configuration.ExeConfigurationFileMap

オブジェクトを与える必要があります。
このクラスのExeConfigFilenameプロパティにファイル名を指定します。


ConfigurationUserLevelは通常Noneで問題ありません。ローミングなどが
絡む場合は別途適切な値を指定します。


System.Configuration名前空間を利用する場合、先に参照設定で
「System.Configuration.dll」を設定しておく必要があります。


以下、サンプルです。
Hoge.Configという名前で構成ファイルを用意します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <clear />
        <add 
            name="HogeConnectionString" 
            connectionString="Server=.\SQLEXPRESS;Integrated Security=True;Database=XXXX;Persist Security Info=False" 
            providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>


以下、それを読み取るサンプルです。

using System;
using System.Configuration;

namespace ReadAnotherConfigFile
{
    class Program
    {
        static void Main(string[] args)
        {
            //
            // 既定の構成ファイルとは別のファイルを構成ファイルとして読み込む.
            //
            var configFile = @"Hoge.config";
            var exeFileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
            var config     = ConfigurationManager.OpenMappedExeConfiguration(exeFileMap, ConfigurationUserLevel.None);
            var connString = config.ConnectionStrings.ConnectionStrings["HogeConnectionString"].ConnectionString;

            Console.WriteLine(connString);

            Console.WriteLine("Press <ENTER> to Exit...");
            Console.ReadLine();
        }
    }
}


実行結果は以下のようになります。

Server=.\SQLEXPRESS;Integrated Security=True;Database=XXXX;Persist Security Info=False
Press  to Exit...

================================
過去の記事については、以下のページからご参照下さい。