Чтение переменных среды на универсальном хосте без префикса (.NET)

Я хочу читать свои пользовательские переменные среды в .NET 5 или .NET 6. У меня есть некоторые проблемы. Я могу читать только переменные среды с DOTNET_ и ASPNETCORE_ префиксы:

Например, я не могу это прочитать MyKey=MyValue:

      public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostContext,configuration) =>
        {
            string myKey = hostContext.Configuration["MyKey"];
            configuration.AddJsonFile($"Airlines/{myKey}.json");
        })
        .ConfigureServices((hostContext, services) =>
        {
            services.AddRabbitMQ();
            services.AddSingleton<NiraAvailableFlightsConsumer>();

            services.AddOptions<AirlineOptions>()
                    .Bind(hostContext.Configuration);
        });

1 ответ

В документации к строителю по умолчанию сказано:

Загружает конфигурацию хоста из:

  • Переменные среды с префиксом DOTNET_.

Таким образом, ваша переменная не читается как часть конфигурации контекста хоста. Вы можете указать строителю загрузить все переменные среды, добавив ConfigureHostConfiguration позвоните в свой стартап:

      public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureHostConfiguration(config =>
        {
            config.AddEnvironmentVariables();
        })
        .ConfigureAppConfiguration((hostContext, configuration) =>
        {
            string myKey = hostContext.Configuration["MyKey"];
            configuration.AddJsonFile($"Airlines/{myKey}.json");
        })
        .ConfigureServices((hostContext, services) =>
        {
            ....
        });
Другие вопросы по тегам