.NET コンソールアプリケーション (.NET 5/6/7)で appsettings.json ファイルから設定情報を読み込む

.NET 5 コンソールアプリケーションで appsettings.json ファイルから設定情報を読み込むコードを紹介します。

概要

.NET Framework のコンソールアプリケーションでは Settings.settings ファイルを利用し、Properties.Settings.Default オブジェクトを利用して アプリケーションごとの設定情報を取得できますが、.NET 5や .NET Core ではSetting.settings ファイルではなく、appsettings.jsonファイルを利用する方法が 推奨されています。
この記事では、appsettings.json ファイルを利用して設定情報を読み込む方法を紹介します。

手順

アプリケーションの準備

Visual Studioを起動します。


コンソールアプリケーションのプロジェクトを作成します。今回は .NET 5 のコンソールアプリケーションを作成します。

Microsoft.Extensions.Configuretion.Json の導入

GUIのパッケージ管理を利用する場合

[ツール]メニューの[NuGet パッケージ マネージャー]の[ソリューションの NuGet パッケージの管理]の項目をクリックします。


[NuGet ソリューション]のウィンドウが表示されます。


上部の[参照]タブをクリックして参照タブをアクティブにします。タブの下の検索ボックスにMicrosoft.Extensions.Configuretion.json を入力して検索します。 検索結果の一覧が検索ボックス下の枠に表示されます。


検索結果の[Microsft.Extensions.Configuretion.Json]の項目をクリックして選択します。右側にインストールするプロジェクトのリストが表示されますので、 パッケージをインストールするプロジェクトにチェックをつけます。チェック後ウィンドウ右下の[インストール]ボタンをクリックします。


[変更のプレビュー]ダイアログが表示されます。[OK]ボタンをクリックしてインストールを開始します。


インストールが完了すると、ソリューションエクスプローラーのツリービューの[依存関係]ノードの[パッケージ]のノード内に[Microsoft.Extensions.Configuretion.Json]のパッケージのノードが追加されます。

NuGet パッケージマネージャーコンソールを利用する場合

NuGet パッケージマネージャー コンソールを利用してインストールする方法もあります。
Microsoft.Extensions.Configuration.Json のNuGetパッケージのページ(https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/)を確認します。[Package Manager] タブ部分にパッケージ マネージャー コンソールでインストールする際のコマンドが掲載されています。
確認時点でのインストールコマンドは Install-Package Microsoft.Extensions.Configuration.Json -Version 5.0.0 でした。


Visual Studio を起動します。編集対象のアプリケーションプロジェクトがあるのソリューションを開きます。 ソリューションを開いたのち、[ツール]メニューの[NuGet パッケージ マネージャー]のサブメニューの [パッケージ マネージャー コンソール] の項目をクリックします。


パッケージ マネージャー コンソールが表示されます。


先ほどNuGetのページで入手した、下記の Microsoft.Extensions.Configuration.Json パッケージのインストールコマンドを入力して実行します。
Install-Package Microsoft.Extensions.Configuration.Json -Version 5.0.0`


インストールが実行されます。


ソリューションエクスプローラのプロジェクトノードの[依存関係]ノードの子ノードの[パッケージ]ノードを開きます。Microsoft.Extensions.Configuration.Json の項目が追加されていることが確認できます。

appsettings.jsonファイルの作成

設定情報を記述するappsettings.jsonファイルを作成します。ソリューションエクスプローラーのプロジェクトのノードをクリックして選択し、右クリックします。 下図のポップアップメニューが表示されますので、[追加]メニューの[新しい項目]をクリックします。


[新しい項目の追加]ダイアログボックスが表示されますので、"JavaScript JSON 構成ファイル"の項目をクリックして選択します。


ダイアログボックス下部の[名前]欄は "appsettings.json" とします。設定ができたらダイアログ右下の[追加]ボタンをクリックします。


appsettings.jsonの名称でJSONファイルが追加されます。


appsettings.json ファイルの内容を下記に変更します。
appsettings.json
{
  "TestValues": {
    "Key1": "Value-100",
    "Key2": "Value-200",
    "Key3": "Value-300"
  }
}


作成したappsettings.json ファイルは Unicode UTF-8 エンコーディングで保存します。
Visual Studioでエンコードを指定して保存する手順はこちらの記事を参照してください。

[保存オプションの詳細設定]ダイアログの[エンコード]の指定で [Unicode (UTF-8 シグネチャ付き)] または、[Unicode (UTF-8 シグネチャなし)] を指定して保存します。

appsetting.jsonの出力設定の変更

appsetting.jsonファイルがビルド結果の出力先に配置される設定に変更します。
ソリューションエクスプローラーで appsetting.jsonをクリックして選択します。プロパティウィンドウのappsetting.json ファイルのプロパティの [出力ディレクトリにコピー]の値を確認します。デフォルトでは "コピーしない" に設定されています。値のコンボボックスをクリックしてドロップダウンリストを表示し、 リストの[常にコピーする]をクリックして、設定を変更します。

コードの実装

コンソールアプリケーションのProgram.cs ファイルを開き、下記のコードを記述します。
using System;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace AppSettingsJsonDotNet5
{
  class Program
  {
    static void Main(string[] args)
    {
      IConfiguration configuration = new ConfigurationBuilder()
      .SetBasePath(Directory.GetCurrentDirectory())
      .AddJsonFile("appsettings.json", true, true)
      .Build();

      IConfigurationSection section = configuration.GetSection("TestValues");
      string str = section["Key1"];
      Console.WriteLine(str);
      str = section["Key2"];
      Console.WriteLine(str);
      str = section["Key3"];
      Console.WriteLine(str);

      Console.ReadLine();

    }
  }
}

解説

Microsoft.Extensions.Configuration.Jsonのアセンブリを利用するためのusingを記述します。
  using Microsoft.Extensions.Configuration;

ConfigurationBuilderを利用して、appsettings.json ファイルを読み込みます。
AddJsonFileメソッドの呼び出しでJSONファイルを指定します。設定後にBuild()メソッドを呼び出し、設定にアクセスするためのIConfigurationRootオブジェクトを取得します。
  IConfiguration configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", true, true)
    .Build();
補足1
実行ファイルとappsettings.jsonが同一フォルダの場合は、SetBasePathの指定が無くても動作します。
  IConfiguration configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", true, true)
    .Build();
補足2
SetBasePathにSystem.AppDomain.CurrentDomain.BaseDirectory を与える方法もあります。
  IConfiguration configuration = new ConfigurationBuilder()
    .SetBasePath(System.AppDomain.CurrentDomain.BaseDirectory)
    .AddJsonFile("appsettings.json", true, true)
    .Build();
補足3
上記のコードは以下の記述でも動作します。
      ConfigurationBuilder cnfBuilder = new ConfigurationBuilder();
      IConfigurationBuilder icnfBuilder = cnfBuilder.SetBasePath(System.AppDomain.CurrentDomain.BaseDirectory);
      icnfBuilder = icnfBuilder.AddJsonFile("appsettings.json", true, true);
      IConfigurationRoot configuration = icnfBuilder.Build();

下記のコードでセクションを読み取ります。GetSectionメソッドの引数に読み取るセクション名を与えます。GetSectionメソッドの戻り値が セクション内の情報にアクセスする、IConfigurationSection オブジェクトになります。
  IConfigurationSection section = configuration.GetSection("TestValues");
IConfigurationSectionオブジェクトのインデクサにキー名を与えると、キー名に対応する値を取得できます。 下記のコードでは、セクション内のキー名 Key1 に対応する値を取得して、コンソール画面に出力しています。
  string str = section["Key1"];
  Console.WriteLine(str);

実行結果

上記のプロジェクトを実行します。コンソールアプリケーションが起動し、コマンドプロンプトのウィンドウに 下図の結果が表示されます。


appsettings.json ファイルに記述した "TestValues" セクションの Key1, Key2, Key3 値がコンソールに出力されています。
Value-100
Value-200
Value-300
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2020-12-16
iPentec all rights reserverd.