首页 > 解决方案 > ASP.NET Core 2:在 `Startup()` 中,如何指定其他参数来选择正确的配置?

问题描述

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

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

它处理 debug vs staging vs prod,但我们有第二个维度,所以我们还想要一个:

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

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

这如何最好地完成?

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

解决方案


Program.CreateWebHostBuilder在 ASP.NET Core 2+中,这是在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);
        });
}

推荐阅读