Appsettings.Json

Скачать

🧾 appsettings.json

Это основной конфигурационный файл в .NET Core / .NET 5+ проектах.

Пример appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning"
    }
  },
  "ConnectionStrings": {
    "Default": "Server=localhost;Database=MyDb;User Id=sa;Password=123;"
  },
  "MySettings": {
    "ApiKey": "abc123"
  }
}

📍 Где используется:

  • Подключение к БД
  • Логирование
  • Конфигурация API ключей, флагов, путей и т.д.
  • Чтение из него через Configuration["MySettings:ApiKey"]

🔄 Особенности appsettings.json:

Характеристика Значение
📁 Хранится в проекте В корне проекта
📦 Включается в сборку Копируется при публикации в output
🔄 Можно менять без перекомпиляции Да (если приложение перезапускается)
🧪 Поддерживает слои appsettings.json, appsettings.Development.json, appsettings.Production.json
✅ Имеет иерархию Да (ключи можно указывать с :)

📁 Пример структуры для сред:

  • appsettings.json — базовая конфигурация
  • appsettings.Development.json — перекрывает базовую в режиме разработки
  • appsettings.Production.json — в проде

Загрузка конфигурации происходит автоматически по ASPNETCORE_ENVIRONMENT.


🌿 Переменные окружения (ENV)

Переменные окружения — это внешние переменные, задаваемые вне приложения:

  • В командной строке
  • В файле .env (через сторонние пакеты)
  • В Docker
  • В системных настройках

Пример:

export MySettings__ApiKey="secret-from-env"

В .NET двойное подчеркивание __ заменяется на : для вложенных значений.


📍 Где применяются:

  • В CI/CD
  • В Docker-контейнерах
  • На прод-серверах
  • В Kubernetes
  • Для хранения секретов, паролей, API-ключей (вместо appsettings.json)

🔄 Особенности переменных окружения:

Характеристика Значение
💾 Не хранятся в проекте Определяются в окружении
🔒 Хороши для секретов Безопаснее, чем хранить пароли в файле
🧱 Перекрывают appsettings.json Да, при совпадении ключа
🧩 Не имеют иерархии Только через __
🧪 Работают без перезапуска Нет, нужно перезапускать приложение для применения

🔁 Сравнение appsettings.json vs ENV

Свойство appsettings.json Переменные окружения (ENV)
📦 Хранение Внутри проекта Вне проекта (в ОС, Docker, CI и т.п.)
🔒 Подходит для секретов ❌ Нет (небезопасно) ✅ Да
🌍 Уровень среды Есть appsettings.{ENV}.json Задаются напрямую
⚙️ Переопределение Может быть переопределён Переопределяет всё остальное
🔁 Горячая перезагрузка Частично, через сторонние решения ❌ Нет
🧩 Гибкость Подходит для всех настроек Лучше использовать только для чувствительных данных

🤝 Как они работают вместе?

.NET загружает конфигурации в определённом порядке — от менее приоритетных к более приоритетным:

  1. appsettings.json
  2. appsettings.{Environment}.json
  3. Секреты пользователя (в dev)
  4. Переменные окружения
  5. Параметры командной строки

Это значит: ENV перекрывает всё, если ключ совпадает.


🛠 Пример комбинирования

appsettings.json:

{
  "MySettings": {
    "ApiKey": "from-config"
  }
}

ENV:

MySettings__ApiKey="from-env"

Использование в коде:

string apiKey = configuration["MySettings:ApiKey"]; // будет "from-env"

✅ Когда использовать что?

Сценарий Рекомендуемый способ
Настройки по умолчанию appsettings.json
Локальные настройки разработки appsettings.Development.json
Секреты (API-ключи, пароли) ENV или Secret Manager
Переопределение в CI/CD ENV
В Docker / Kubernetes ENV через .env, Secrets