🧾 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 загружает конфигурации в определённом порядке — от менее приоритетных к более приоритетным:
appsettings.json
appsettings.{Environment}.json
- Секреты пользователя (в dev)
- Переменные окружения
- Параметры командной строки
Это значит: 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 |