.NET 5 Windows Form アプリケーションで appsettings.json ファイルから設定情報を読み込む

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

概要

Windows Formアプリケーションでは Settings.settings を利用してアプリケーションの設定情報を読み込むことができます。 一方で、appsettings.json を利用して設定情報を読み込む実装をすることもできます。 この記事では、.NET 5 Windows Form アプリケーションで appsettings.json ファイルを読み込んで設定情報を取得するコードを紹介します。
Windows Formアプリケーションで設定値を読み込む処理だけの実装であれば、Settings.settings ファイルを利用する方法もあります。 詳しくはこちらの記事を参照してください。

実装方針

コンソールアプリケーションの場合と同様に、IConfiguration インターフェイスオブジェクトを利用します。

事前準備:Microsoft.Extensions.Configuretion.Json の導入

Microsoft.Extensions.Configuretion.Json パッケージをインストールします。

GUI のパッケージ管理ツール を利用する方法

アプリケーションプロジェクトのソリューションを開きメインメニューの[ツール]の[NuGet パッケージ マネージャー]の項目をクリックします。


NuGetのパッケージ マネージャーのウィンドウが表示されます。


上部の検索ボックスに、"Microsoft.Extensions.Configuretion.Json" を入力し、パッケージをします。 パッケージが見つかりましたらクリックして選択します。


パッケージが選択されると右側にインストールするプロジェクトを指定できます。
インストールするプロジェクトの左側のチェックボックスをクリックしてチェックをつけます。チェック後、 パッケージ管理ウィンドウのウィンドウ下部の[インストール]ボタンをクリックして、パッケージのファイルをインストールします。


インストールボタンをクリックすると、下図の依存関係ダイアログが表示されます。[OK]ボタンをクリックして続行します。


NuGet パッケージがインストールできました。


補足補足
既にソリューションの別プロジェクトで"Microsoft.Extensions.Configuretion.Json"のNuGet パッケージがインストールされている場合は、 [参照]の画面での検索結果には表示されません。すでに別プロジェクトでパッケージがインストールされている場合は、[インストール済み]のタブで検索すると、 "Microsoft.Extensions.Configuretion.Json" のNuGetの情報が表示されます。

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

NuGetの "Microsoft.Extensions.Configuretion.Json" のページ(https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/)にアクセスして、インストールコマンドを確認します。


アプリケーションプロジェクトのソリューションを開きメインメニューの[ツール]の [NuGet パッケージ マネージャー コンソール] の項目をクリックします。


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


パッケージ マネージャー コンソールに次のコマンドを入力して実行します。
Install-Package Microsoft.Extensions.Configuration.Json -Version 5.0.0


インストールができると下図の画面が表示されます。


ソリューションエクスプローラを表示して、GUIのツールを利用した場合と同様に、プロジェクトの[依存関係]の[パッケージ]のノード内に、 "Microsoft.Extensions.Configuretion.Json" の項目が追加されていることを確認します。

プログラム例

appsettings.json ファイルの追加

プロジェクトに appsettings.json ファイルを追加します。
ソリューションを開き、ソリューションエクスプローラーでappsettins.jsonを追加するプロジェクトを選択します。


プロジェクトのノードを選択し右クリックします。ポップアップメニューが表示されますので、[追加]メニューの[新しい項目]をクリックします。


[新しい項目の追加]ダイアログが表示されます。


中央のファイルの種類のリストから[JSON ファイル]を選択します。 ダイアログ下部のテキストボックスに "appsettings.json" を入力します。入力後[追加]ボタンをクリックします。


プロジェクトに appsettings.json ファイルが追加されます。

appsettings.json ファイルの編集

appsettings.json ファイルに設定情報を記述します。


今回は以下のコードを記述します。
appsetttings.json
{
  "WinFormTestValues": {
    "Key1": "ぺんぎんクッキー",
    "Key2": "らくだキャラメル",
    "Key3": "しろくまアイス"
  }
}

JSONファイルの保存時には、エンコーディングを指定してUTF-8で保存する必要があります。 (UTF-8のエンコーディングで保存しないと日本語の文字列が値の取得時に文字化けします。)
Visual Studioでエンコードを指定して保存する手順はこちらの記事を参照してください。

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

appsettings.json ファイルの出力ディレクトリへのコピー

作成した appsettings.json ファイルですが、デフォルトではビルド結果の出力ディレクトリに保存されないため、 設定ファイルがアプリケーションの実行ディレクトリに配置されません。実行ファイルと同じディレクトリに出力されるよう 設定を変更します。
ソリューション エクスプローラーでappsettings.json ファイルを選択します。ファイル選択状態でプロパティウィンドウを表示します。 ファイルのプロパティの[出力ディレクトリにコピー]が"コピーしない"に設定されています。デフォルトの設定はコピーしない設定になっています。
コンボボックスを開き、[出力ディレクトリにコピー]の設定を変更します。今回は "常にコピーする" に変更します。


appsettings.json のファイルの出力設定を変更できました。

UI

下図のフォームを作成します。ボタンと複数行のMultilineプロパティをtrueに設定したテキストボックスを配置します。

コード

フォームのロジックを実装します。下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Extensions.Configuration;

namespace AppSettingsWinForm
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      ConfigurationBuilder cfb = new ConfigurationBuilder();
      cfb.SetBasePath(System.IO.Directory.GetCurrentDirectory());
      cfb.AddJsonFile("appsettings.json", true, true);
      IConfiguration configuration = cfb.Build();

      IConfigurationSection section = configuration.GetSection("WinFormTestValues");
      string str = section["key1"];
      textBox1.Text += str + "\r\n";
      str = section["key2"];
      textBox1.Text += str + "\r\n";
      str = section["key3"];
      textBox1.Text += str + "\r\n";
    }
  }
}

解説

ConfigurationBuilder オブジェクトを作成し実行ファイルの位置にあるappsettings.jsonファイルをConfigurationBuilderに読み込みます。
ファイルを読み込んだのち、ConfigurationBuilder オブジェクトのBuild() メソッドを実行し、IConfiguration オブジェクトを作成します。
      ConfigurationBuilder cfb = new ConfigurationBuilder();
      cfb.SetBasePath(System.IO.Directory.GetCurrentDirectory());
      cfb.AddJsonFile("appsettings.json", true, true);
      IConfiguration configuration = cfb.Build();

IConfiguration オブジェクトを利用して、appsettings.jsonに記述されている設定内容にアクセスできます。
      IConfigurationSection section = configuration.GetSection("WinFormTestValues");
      string str = section["key1"];
      textBox1.Text += str + "\r\n";

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。[button1]をクリックします。


[button1]ボタンをクリックすると、appsettings.json ファイルに記述された値が読み込まれ、テキストボックスに表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2021-07-14
iPentec all rights reserverd.