.NET Core Console Applicationで設定ファイルを扱う

csharp C#

記事の内容

この記事では、.NET Core Applicationにて設定ファイルを扱う方法について紹介します。

(.NET Coreのバージョンは3.1で確認しています)

基本的な読込方法

jsonファイルをプロジェクトに追加します。そして、そのjsonファイルを出力ディレクトリにコピーする設定を行い、設定ファイルを読み込むプログラムにて設定情報を読み込みます。

今回は、以下の設定ファイルを読み込みます。

ファイルをプロジェクトに追加し、ファイル名は、appsettings.jsonとします。

{
  "WebAPIBaseUrl": "http://192.168.0.1",
  "UserSettings": {
    "Name": "XXXX",
    "Age" :  20
  }
}

また、出力ディレクトリにコピーされるように設定します。

設定ファイルを読み込むために、以下のライブラリをNuGetから取得しておきます。

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json

以下のコードで読み込み処理を行います。

using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(path: "appsettings.json")
            .Build();

            Console.WriteLine(configuration["WebAPIBaseUrl"]);
            Console.WriteLine(configuration["UserSettings:Name"]);
            Console.WriteLine(configuration["UserSettings:Age"]);
        }
    }
}

出力結果

環境に応じて、設定内容を切り替える

よくあるユースケースとして、開発環境での設定値と本番環境での設定値を切り替えたいというケースがあると思います。その方法を紹介します。

今回は、環境変数にどの環境なのか、例えば開発環境なのか本番環境なのかの情報を設定し、その情報を取得して読み込む設定ファイルを切り替えるようにします。

わかりやすいように2つの設定ファイルを用意します。

1つ目は、上記で使用した設定ファイルappsettings.jsonEnvironmentを追加します。

{
  "WebAPIBaseUrl": "http://192.168.0.1",
  "UserSettings": {
    "Name": "XXXX",
    "Age": 20
  },
  "Environment": "Default"
}

2つ目は、appsettings.Development.jsonファイルを以下の内容で作成します。

(出力ディレクトリにコピーする設定を忘れずに)

{
  "Environment": "Development"
}

そして、以下のソースコードを実行します。まずは、環境変数に何も設定しない状態で行います。

ここで重要なのは、.AddJsonFile($”appsettings.{environmentName}.json”, true, true)部分が追加されたことです。これにより、環境変数で設定された名称の設定ファイルがある場合、上書きで読み込まれます。今回の実行は、環境変数に設定していませんので、appsettings.jsonの内容が出力されます。

using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var environmentName = Environment.GetEnvironmentVariable("APPLICATION_ENVIRONMENT");

            IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(path: "appsettings.json")
            .AddJsonFile($"appsettings.{environmentName}.json", true, true)
            .Build();

            Console.WriteLine(configuration["Environment"]);
        }
    }
}

出力結果

次は、環境変数を設定し、appsettings.Development.jsonを上書きで読み込むようにします。プロジェクトの設定で、デバッグより環境変数を設定します。

実行すると以下の結果になります。appsettings.Development.jsonの内容が上書きされて取得されていることがわかります。

このように環境変数に応じて設定ファイルを読み込むことができるので、複数の環境に応じて設定を切り替えるなど可能になりますので、使ってみてはどうでしょうか。

コメント