在 .net core 3.1 应用程序中使用 AddEnvironmentVariables

Sex*_*yMF 5 appsettings .net-core-3.1

我生成了一个新的网络项目。似乎在 .net core 3.1 中生成了 appSettings.jsons 并且工作正常。问题是它们是由运行时加载和控制的,而不是我。所以我不能调用AddEnvironmentVariables

AddEnvironmentVariables在这种情况下打电话的正确地点在哪里?

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
}

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
Run Code Online (Sandbox Code Playgroud)

tim*_*mur 10

文档可能是阅读所有可用配置方法的最佳位置。要回答您的特定问题,您所追求的扩展方法是在 上定义的IConfigurationBuilder,因此必须在构建主机之前调用它,如下所示:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureAppConfiguration(configurationBuilder => { configurationBuilder.AddEnvironmentVariables(); }) // here's where you add another `EnvironmentVariablesConfigurationSource`
                ;
Run Code Online (Sandbox Code Playgroud)

然而

EnvironmentVariablesConfigurationSource已经为您注入了默认值ConfigureWebHostDefaults,因此您最终将拥有两个提供程序。

我假设您想注入自定义配置,因此您可能需要先从列表中删除默认配置:

.ConfigureAppConfiguration(configurationBuilder =>
{
    configurationBuilder.Sources.Remove(
    configurationBuilder.Sources.First(source =>
        source.GetType() == typeof(EnvironmentVariablesConfigurationSource))); //remove the default one first
    configurationBuilder.AddEnvironmentVariables(); 
})
Run Code Online (Sandbox Code Playgroud)

希望这能给你一个进一步探索的起点