我们正在构建一个新的ASP.NET Core应用程序,以部署到需要不同配置选项的几个不同环境中。例如,Azure
,AWS
和local
用于开发。每个都需要不同的配置设置。我们已经使用了常见的方法:
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
可以处理调试,暂存和生产,但是我们有第二个维度,因此我们还需要一个:
.AddJsonFile($"appsettings.{DeploySite}.json", optional: true)
或类似的东西。我们可以在命令行或环境变量中传递DeploySite
或任何方便的方法,但是IHostingEnvironment
方法中提供的Startup
中似乎没有类似的内容。
如何最好地做到这一点?
答案 0 :(得分:1)
在ASP.NET Core 2+中,此操作在Program.CreateWebHostBuilder
中完成,而不是在Startup
中完成。我们在部署中做了几乎相同的操作,需要appsettings.<name>.json
文件进行配置。我们通过以--App:InstanceName <name>
的形式传递命令行参数来实现。然后在启动时进行设置:
public static void Main(string[] args)
{
IWebHost host = CreateWebHostBuilder(args).Build();
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((hostContext, config) =>
{
IConfigurationRoot commandConfig = config.Build();
config.AddJsonFile($"appsettings.{commandConfig["App:InstanceName"]}.json", optional: true, reloadOnChange: true);
});
}