.NET 5 Windows Form アプリケーションで appsettings.json ファイルから設定情報を読み込むコードを紹介します。
Windows Formアプリケーションでは Settings.settings を利用してアプリケーションの設定情報を読み込むことができます。
一方で、appsettings.json を利用して設定情報を読み込む実装をすることもできます。
この記事では、.NET 5 Windows Form アプリケーションで appsettings.json ファイルを読み込んで設定情報を取得するコードを紹介します。
コンソールアプリケーションの場合と同様に、IConfiguration インターフェイスオブジェクトを利用します。
Microsoft.Extensions.Configuretion.Json パッケージをインストールします。
アプリケーションプロジェクトのソリューションを開きメインメニューの[ツール]の[NuGet パッケージ マネージャー]の項目をクリックします。
NuGetのパッケージ マネージャーのウィンドウが表示されます。
上部の検索ボックスに、"Microsoft.Extensions.Configuretion.Json" を入力し、パッケージをします。
パッケージが見つかりましたらクリックして選択します。
パッケージが選択されると右側にインストールするプロジェクトを指定できます。
インストールするプロジェクトの左側のチェックボックスをクリックしてチェックをつけます。チェック後、
パッケージ管理ウィンドウのウィンドウ下部の[インストール]ボタンをクリックして、パッケージのファイルをインストールします。
インストールボタンをクリックすると、下図の依存関係ダイアログが表示されます。[OK]ボタンをクリックして続行します。
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 ファイルを追加します。
ソリューションを開き、ソリューションエクスプローラーでappsettins.jsonを追加するプロジェクトを選択します。
プロジェクトのノードを選択し右クリックします。ポップアップメニューが表示されますので、[追加]メニューの[新しい項目]をクリックします。
[新しい項目の追加]ダイアログが表示されます。
中央のファイルの種類のリストから[JSON ファイル]を選択します。
ダイアログ下部のテキストボックスに "appsettings.json" を入力します。入力後[追加]ボタンをクリックします。
プロジェクトに appsettings.json ファイルが追加されます。
appsettings.json ファイルに設定情報を記述します。
今回は以下のコードを記述します。
{
"WinFormTestValues": {
"Key1": "ぺんぎんクッキー",
"Key2": "らくだキャラメル",
"Key3": "しろくまアイス"
}
}
JSONファイルの保存時には、エンコーディングを指定してUTF-8で保存する必要があります。
(UTF-8のエンコーディングで保存しないと日本語の文字列が値の取得時に文字化けします。)
Visual Studioでエンコードを指定して保存する手順はこちらの記事を参照してください。
[保存オプションの詳細設定]ダイアログの[エンコード]の指定で [Unicode (UTF-8 シグネチャ付き)] または、[Unicode (UTF-8 シグネチャなし)] を指定して保存します。
作成した appsettings.json ファイルですが、デフォルトではビルド結果の出力ディレクトリに保存されないため、
設定ファイルがアプリケーションの実行ディレクトリに配置されません。実行ファイルと同じディレクトリに出力されるよう
設定を変更します。
ソリューション エクスプローラーでappsettings.json ファイルを選択します。ファイル選択状態でプロパティウィンドウを表示します。
ファイルのプロパティの[出力ディレクトリにコピー]が"コピーしない"に設定されています。デフォルトの設定はコピーしない設定になっています。
コンボボックスを開き、[出力ディレクトリにコピー]の設定を変更します。今回は "常にコピーする" に変更します。
appsettings.json のファイルの出力設定を変更できました。
下図のフォームを作成します。ボタンと複数行の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 ファイルに記述された値が読み込まれ、テキストボックスに表示されます。