.net ASPNETCORE_ENVIRONMENT 根据环境切换不同的配置文件

调整program.cs文件中的CreateHostBuilder方法

//从hostingContext.HostingEnvironment.EnvironmentName中获取对应的环境名称
 public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext,config) =>
                {
                    config.Sources.Clear();
                    var env = hostingContext.HostingEnvironment;
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{env.EnvironmentName}.json",
                                         optional: true, reloadOnChange: true);

                    Console.WriteLine($"appsettings.{env.EnvironmentName}.json");

                    config.AddEnvironmentVariables();

                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                })
                .UseContentRoot(AppDomain.CurrentDomain.BaseDirectory)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder
                    .UseUrls($"http://{ip}:{port}")
                    .UseStartup<Startup>()
                    ;
                })
                .UseWindowsService();
        }

hostingContext.HostingEnvironment对象下包含四个可以判断当前环境的方法

IsDevelopment()
IsStaging()
IsProduction()
IsEnvironment()

可以通过配置环境变量(windows中为系统变量) ASPNETCORE_ENVIRONMENT 来切换环境

另外也可以通过修改launchSettings.json文件中的environmentVariables来读取不同的配置

通过AddJsonFile添加的顺序需要格外注意,在底层通过ConfigurationRoot的索引获取值的时候会倒序取出第一个配置文件然后将值返回。
所以需要先添加默认的appsetting.json然后再添加具体的环境配置。

[参考]
ASP.NET CORE 根据环境变量支持多个 appsettings.json

posted @ 2022-08-03 18:26  Hey,Coder!  阅读(1330)  评论(0编辑  收藏  举报