Использование файл конфигурации appsettings.json в консольном приложении .Net Core

  • Михаил
  • 10 мин. на прочтение
  • 308
  • 22 Mar 2023
  • 22 Mar 2023

Консольное приложение .NET core — это удивительный базовый шаблон приложения, который позволяет быстро создать приложение и проверить свои идеи. В то же время его также можно использовать для создания готового к производству приложения. Поскольку это легкий шаблон приложения, в нем нет таких функций, как конфигурация или внедрение зависимостей. Файл Appsettings.json используется для хранения настроек в приложении .NET Core, этот же файл можно добавить в консольное приложение .NET Core для хранения настроек приложения. Следующие шаги помогут вам создать, написать и прочитать конфигурацию appsettings.json. файл в вашем консольном приложении .Net Core Поскольку консольное приложение .NET core не имеет встроенного внедрения зависимостей, функции, от которых зависит приложение, такие как конфигурация, недоступны. В полноценном основном приложении ASP.net конфигурация доступна с использованием внедренного интерфейса IConfiguration по умолчанию. В основное консольное приложение .NET Конфигурацию можно добавить с помощью класса ConfigurationBuilder. Кроме того, также может быть добавлена ​​поддержка настройки приложения с помощью файла Json, переменных среды, командной строки или с помощью настраиваемого поставщика конфигурации.

Типы IConfiguration и ConfigurationBuilder доступны в Microsoft.Extensions.Configuration пакете. Расширения для добавления файла json, например appsettings.json, в качестве источника конфигурации доступны в Microsoft.Extensions.Configuration.Json пакете nuget. Расширения для добавления переменных среды в качестве источника конфигурации доступны в пакете nuget Microsoft.Extensions.Configuration.EnvironmentVariables. Расширения для добавления командной строки в качестве источника конфигурации доступны в Microsoft.Extensions.Configuration.CommandLine пакете nuget.

Первым делом до отредактируем .csproj файл и добавим в него следующие строки.

<ItemGroup>
    <None Update="appsettings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>

Эти строки гарантируют, что appsettings.json файл будет скопирован в свойство Output Directory.

Вышеупомянутые пакеты NuGet можно установить с помощью команды install-package, как показано ниже.

Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json
Install-Package Microsoft.Extensions.Configuration.CommandLine
Install-Package Microsoft.Extensions.Configuration.Binder
Install-Package Microsoft.Extensions.Configuration.EnvironmentVariables 

Установка пакетов для конфигурации

После установки этих пакетов он обеспечивает необходимую функциональность для использования ConfigurationBuilder класса. В приведенном ниже тексте я добавляю файл конфигурации json с именем appsettings.json. Я также добавляю переменные среды и командную строку в качестве источника конфигурации.

static async Task Main(string[] args)
{
        IConfiguration config = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json", true, true)
          .Build();
}

Добавление источников конфигурации и сборка ConfigurationBuilder

Теперь, когда мы создали наших поставщиков конфигурации, мы можем использовать их, как показано ниже.

var telegram = config["Telegram:Key"];

Пример файла конфигурации

{
 "SendTelegram": "true",
 "Telegram": {
   "Key": "139ххххх:AAHfхххххххххххххххххххххххххPlBtfw",
   "Chat_id": "13хххххххх18"
 },
 "Logging": {
   "LogLevel": {
     "Default": "Information",
     //"Microsoft.AspNetCore": "Warning",
     "Microsoft": "Warning",
     "Microsoft.Hosting.Lifetime": "Information",
     "Microsoft.EntityFrameworkCore.Database.Command": "Information"
   }
 },
 "AllowedHosts": "*"
}

Пример использования в файле Programm.cs 

var telegram = config["Telegram:Key"];
if (bool.Parse(config["SendTelegram"]) == true)
    Console.WriteLine("telegramConf = " + telegram);

Для использования конфигурации в классах приложения добавляем:

var serviceProvider = new ServiceCollection()
    .AddSingleton(config)
    .BuildServiceProvider();

После переходим в класс и настраиваем DI в конструкторе.

private IConfiguration config { get; }

public MailJob(IConfiguration config)
{
	this.config = config;
}

И в методах используем.

  string key = config["Telegram:Key"];
  string chat_id = config["Telegram:Chat_id"];

Для проверки пишем

mailJob.ErrorToTelegram(new Error() { application = "FastPing", message = "Запуск приложения" });

Запускаем и получаем сообщение в группу

Решение работает, все замечания в комментариях.