目次

appsettings.jsonの情報を取得できない - C#

appsettings.jsonの情報を取得できない場合の対処法を紹介します。

概要

こちらの記事でappsettings.jsonファイルから情報を取得するコードを紹介しましたが、 appsettings.jsonから値がうまく読みだ出せない場合の対処法を紹介します。

現象

.NET 6コンソールアプリケーションを作成し、NuGetでMicrosoft.Extensions.Configuration.Jsonパッケージをインストールします。 Program.csファイルに次のコードを記述します。
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ファイルの内容は次の通りです。
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を愛用
掲載日: 2022-10-29
iPentec all rights reserverd.