调整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然后再添加具体的环境配置。