Использование .Env В .Net Asp.Net Core

Скачать

🌱 Использование .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 и Linux
  • appsettings.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