我在项目中添加了其他json配置文件

appsettings.DEV.json
appsettings.QA.json

并根据环境将它们加载到Startup函数中:
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
    ...

而且我了解如何更改环境:在项目属性中修改ASPNETCORE_ENVIRONMENT环境变量的值。但是,似乎无法根据配置指定不同的环境变量,下拉列表标记为“N/A”并被禁用。

我看到的唯一选择是手动更改环境变量值,以更改使用哪些应用程序设置。我敢肯定有一种方法可以自动执行此操作,否则您将如何使用CI? (除了使用脚本来更改环境变量外,还必须有一种更简单的方法)。

此处的目标是为三种环境(DEV,QA和PROD)设置自动化构建和持续集成。 DEV和QA位于同一台机器上,因此不能设置手动指定环境的环境变量。

c# - 如何在.NET Core MVC项目中转换appsettings.json?-LMLPHP

最佳答案

从构建类型确定EnvironmentName

对于任何想根据构建类型设置EnvironmentName的人,.UseEnvironment(environmentName)上都有方便的WebHostBuilder(可在Program Main中找到)。

只要针对项目中的构建配置设置了适当的编译符号,您就可以执行以下操作来确定EnvironmentName:

public static void Main(string[] args)
{
    string environmentName;
#if DEBUG
    environmentName = "Development";
#elif STAGING
    environmentName = "Staging";
#elif RELEASE
    environmentName = "Production";
#endif

    var host = new WebHostBuilder()
        .UseKestrel()
        .UseEnvironment(environmentName)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .Build();

    host.Run();
}

08-26 18:34