在没有前缀的通用主机中读取环境变量(.NET)

Posted

技术标签:

【中文标题】在没有前缀的通用主机中读取环境变量(.NET)【英文标题】:Read Environment Variables in generic host without prefix (.NET) 【发布时间】:2021-07-31 16:48:00 【问题描述】:

我想在 .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】:

默认构建器的documentation 表示:

从以下位置加载主机配置:

以 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) =>
        
            ....
        );

【讨论】:

以上是关于在没有前缀的通用主机中读取环境变量(.NET)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 6 中读取环境变量?

在 ASP.NET Core 中读取环境变量

java 读取环境变量和系统变量的方法

Java读取自定义环境变量的方法System.getProperty和System.getenv

idea正确读取到环境变量

如何在 Scala 中读取环境变量