【问题标题】:Using AddEnvironmentVariables in .net core 3.1 app在 .net core 3.1 应用程序中使用 AddEnvironmentVariables
【发布时间】:2020-05-21 14:24:42
【问题描述】:

我生成了一个新的网络项目。似乎在 .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>();
                });
    }

【问题讨论】:

  • 你能看到你的项目的launchSetting.json文件吗?
  • @ArpitJain 是的。顺便说一句,appsettings 是生成并加载的,问题是它是由运行时加载而不是由我加载的,我真的可以调用:AddEnvironmentVariables
  • 我们必须在 LaunchSetting.json 文件和 Startup.cs 文件中添加
  • @ArpitJain 这就是项目的生成方式......我不明白...... appsettings 正在工作,但我不是初始化它的人

标签: appsettings .net-core-3.1


【解决方案1】:

documentation 可能是了解所有可用配置方法的最佳位置。要回答您的具体问题,您需要的扩展方法在 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`
                ;

然而

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 2020-04-27
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2020-05-06
    • 2021-06-02
    相关资源
    最近更新 更多