appsettings.json - это файл конфигурации, который можно использовать для хранения настроек и информации о конфигурации приложения. В C# вы можете использовать пакет Microsoft.Extensions.Configuration для чтения данных конфигурации из appsettings.json.
Давайте попробуем написать приложение использующее конфигурацию:
В папке с нашими уроками введите команду:
dotnet new console -o lesson06
Заменим код Program.cs на:
using Microsoft.Extensions.Configuration;
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
var mySetting = config["MySetting"];
if (string.IsNullOrEmpty(mySetting))
Console.WriteLine("Setting not found in appsettings.json.");
else
Console.WriteLine($"Setting value: {mySetting}");
Создайте новый файл appsettings.json в том же каталоге, что и ваш файл Program.cs.
{
"MySetting": "Hello dotnet 7"
}
<aside>
🔥 Тут нужно быть осторожным, так как эти файлы appsettings.json попадают в сборку в них не должно быть информации чувствительной к просмотру.
</aside>
В консоле перейдите в папку с проектом.
Установим зависимость через dotnet cli:
dotnet add package Microsoft.Extensions.Configuration.Json --version 7.0.0
Добавление пакета отразится в файле lesson06.csproj
Так как файл appsettings.json не часть компилируемого кода проекта, а файл конфигурации, нужно явно указать, что его нужно копировать при сборке в выходную директорию. Давайте добавим нужную настройку в lesson06.csproj.
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
Должно получиться следующее. К слову блоков ItemGroup может быть несколько или один, позиция блока на результат влиять не будет:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
</ItemGroup>
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
В этом примере мы читаем значение параметра с именем MySetting из appsettings.json. Если параметр не найден или имеет пустое значение, выводим сообщение о том, что параметр не найден в файле конфигурации. В противном случае мы выводим значение параметра в консоль. На что тут стоит обратить внимание:
Ключевое слово using при импорте зависимости делает доступными её код без указания полного пути до используемого содержимого библиотеке. Пример:
// До импорта
var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
// После иморта
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder();
<aside>
🐕 Подробней про using можно почитать тут https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/statements/declarations.
</aside>
appsettings.json файл содержит конфигурацию приложения, его зависимостей (если требуется) в формате JSON.
<aside>
🐕 JSON - это популярный формат текстовых данных, который используется для обмена данными в веб и мобильных приложениях. Кроме того, JSON используется для хранения неструктурированных данных в файлах журналов или базах данных NoSQL.
</aside>
Зависимость Microsoft.Extensions.Configuration.Json это готовое решение для загрузки файлов конфигурации в формате JSON.
<aside> 🐕 Большинство зависимостей публикуется тут https://www.nuget.org/, зависимость из примера можно найти по адресу https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/.
</aside>
Класс ConfigurationBuilder - своего рода контейнер для всех видов параметров конфигураций. Доступен через Microsoft.Extensions.Configuration.Json .
Метод AddJsonFile класса ConfigurationBuilder позволяющий: указать адрес до JSON файла конфигурации, признак необязательности файла - optional, перезагрузка конфигурации при изменении файла - reloadOnChange.
Именованный вариант передачи аргументов.
<aside> 🐕 Подробней про именованные аргументы можно почитать тут https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/statements/declarations.
</aside>
Метод Build класса ConfigurationBuilder собирающий все заданные насройки конфигурации и возвращающий эксемпляр сконфигурированной конфигурации.
На этом всё, давайте сохраним файл и убедимся что консоль находится в папке с уроком lesson06.
Запустите приложение без параметров:
dotnet run
Вы получите вывод:
Setting value: Hello dotnet 7
Вы можете заметить, что после сборки проекта файл с конфигурацией был скопирован в ./bin/Debug/net7.0/appsettings.json.
<aside> 🐕 В этом уроке мы научились использовать в приложение файл конфигурации. Это позволит нам конфигурировать приложения через заранее сформированные параметры конфигурации.
</aside>