ASP.NET Core 2:如何在“ Startup()”中指定其他参数来选择正确的配置?

时间:2019-03-08 15:27:15

标签: asp.net-core .net-core

我们正在构建一个新的ASP.NET Core应用程序,以部署到需要不同配置选项的几个不同环境中。例如,AzureAWSlocal用于开发。每个都需要不同的配置设置。我们已经使用了常见的方法:

.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)

可以处理调试,暂存和生产,但是我们有第二个维度,因此我们还需要一个:

.AddJsonFile($"appsettings.{DeploySite}.json", optional: true)

或类似的东西。我们可以在命令行或环境变量中传递DeploySite或任何方便的方法,但是IHostingEnvironment方法中提供的Startup中似乎没有类似的内容。

如何最好地做到这一点?

1 个答案:

答案 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);
        });
}