appsettings.jsonの情報を取得できない - C#
appsettings.jsonの情報を取得できない場合の対処法を紹介します。
概要
こちらの記事でappsettings.jsonファイルから情報を取得するコードを紹介しましたが、
appsettings.jsonから値がうまく読みだ出せない場合の対処法を紹介します。
現象
.NET 6コンソールアプリケーションを作成し、NuGetで
Microsoft.Extensions.Configuration.Json
パッケージをインストールします。
Program.csファイルに次のコードを記述します。
// See https://aka.ms/new-console-template for more information
using Microsoft.Extensions.Configuration;
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
IConfigurationSection section = configuration.GetSection("TestValues");
string str = section["Key1"];
Console.WriteLine("key1: " + str);
str = section["Key2"];
Console.WriteLine("key2: " + str);
str = section["Key3"];
Console.WriteLine("key3: " + str);
Console.ReadLine();
appsettings.jsonファイルの内容は次の通りです。
{
"TestValues": {
"Key1": "Value-100",
"Key2": "Value-200",
"Key3": "Value-300"
}
}
プロジェクトを実行します。
ウィンドウが表示されますが、appsettings.json の値が画面に表示されません。
調査
ブレークポイントを設置して値を確認します。sectionプロパティで読み出した値が代入される
str
変数の値が "null" になっています。
このままでは原因の特定が難しいため、AddJsonFileメソッドの第二引数の optional の bool値を false に変更します。
この変更により、appsettings.jsonファイルが開けない場合は例外が発生します。
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.Build();
コード変更後にデバッグをすると、
System.IO.FileNotFoundException
が発生しappsettings.jsonファイルが見つからない旨の例外が発生します。
デバッグの実行ディレクトリを確認します。
appsettings.jsonのファイルはありますが、よく見るとファイル名が
appsetings.json
になっており、ファイル名が違っています。
ソリューションエクスプローラーでファイル名を
appseting.json
から
appsettings.json
に修正します。
ファイル名の修正後に再度デバッグします。例外は発生せずブレークポイントまで実行できます。
str
変数に appsettings.json ファイルに記述した値が設定されていることが確認できます。
ウィンドウにも appsettings.json ファイルに記述した値が表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用