🌱 Использование .env
в .NET / ASP.NET Core
📌 Что такое .env
?
.env
— это простой текстовый файл, содержащий пары ключ=значение. Он обычно используется для хранения переменных окружения: секретов, ключей, URL и других конфигураций, которые нельзя хардкодить.
Пример .env
:
CONNECTION_STRING=Host=localhost;Port=5432;Database=mydb;
API_KEY=super-secret
ASPNETCORE_ENVIRONMENT=Development
✅ Как использовать .env
в .NET
В чистом .NET (в отличие от Node.js или Python) .env
не подгружается автоматически. Чтобы это сделать:
🔌 Шаг 1: Установи пакет DotNetEnv
Через CLI:
dotnet add package DotNetEnv
Или через .csproj
:
<PackageReference Include="DotNetEnv" Version="3.1.3" />
🛠️ Шаг 2: Загрузите .env
при старте
В Program.cs
или Startup.cs
:
using DotNetEnv;
public class Program
{
public static void Main(string[] args)
{
// Подгружаем .env в переменные окружения
DotNetEnv.Env.Load();
CreateHostBuilder(args).Build().Run();
}
}
🧪 Шаг 3: Используй переменные в коде
Пример:
string apiKey = Environment.GetEnvironmentVariable("API_KEY");
Или с ASP.NET Core DI:
public class MyService
{
public MyService(IConfiguration config)
{
var conn = config["CONNECTION_STRING"];
}
}
⚠️ Если ты хочешь использовать
.env
напрямую вIConfiguration
, см. следующий шаг.
📚 (Опционально) Расширение конфигурации через .env
Ты можешь расширить IConfiguration
так, чтобы .env
файл стал частью appsettings
.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
DotNetEnv.Env.Load(); // загружаем в ENV
// config.AddEnvironmentVariables(); // уже добавлено по умолчанию
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
🧼 Добавь .env
в .gitignore
Чтобы случайно не залить секреты:
.env
🧠 Когда использовать .env
Сценарий | Подходит? |
---|---|
Хранение ключей и токенов | ✅ |
Локальная настройка без secrets.json |
✅ |
Production / CI/CD через Docker | ✅ |
Сложная конфигурация приложения | ❌ Лучше использовать appsettings.*.json |
🐳 Использование с Docker
.env
можно использовать в docker-compose
:
env_file:
- .env
📌 Альтернатива: appsettings.json
+ dotnet user-secrets
.env
— удобно в Docker и Linuxappsettings.json
— основная конфигурацияuser-secrets
— для чувствительных данных в dev
📦 Как скопировать .env
в bin
?
По умолчанию .env
не копируется в выходную директорию (bin/Debug/...
), и приложение не сможет его найти. Чтобы это исправить — нужно указать это явно в .csproj
:
🔧 Добавление в .csproj
Можно указать в свойствах файла - копирование.
Дрогой вариант -
Открой файл проекта .csproj
и добавь:
<ItemGroup>
<None Update=".env">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
📌 Что делает эта настройка:
Update=".env"
— говорит, что мы обновляем настройки существующего файла.-
CopyToOutputDirectory
— управляет копированием: -
PreserveNewest
— копирует только если файл изменился Always
— всегда копирует
Теперь файл .env
окажется в папке bin/Debug/net8.0/
, и DotNetEnv.Env.Load()
сможет его найти.
✅ Проверка
После сборки проверь:
ls bin/Debug/net8.0/
Ты должен увидеть там .env
.
🧠 Совет
Если у тебя несколько .env
файлов (например .env.dev
, .env.prod
) — добавь нужный в проект и укажи имя явно:
DotNetEnv.Env.Load(".env.dev");
И не забудь:
<None Update=".env.dev">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Без явного указания .env
не попадёт в bin
, и DotNetEnv
не сможет его найти. Обязательно добавь его в .csproj
как CopyToOutputDirectory
, особенно если ты работаешь с dotnet run
, Docker или CI.
✅ Вывод
.env
в .NET:
- Не поддерживается из коробки, но легко подключается
- Удобен для хранения переменных среды
- Используется совместно с
Environment.GetEnvironmentVariable
илиIConfiguration