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

标签 c# .net json asp.net-mvc asp.net-core

我已经在我的项目中添加了额外的 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 在同一台机器上,因此设置手动指定环境的环境变量不是一个选项。

Project Properties : Debug section

最佳答案

根据构建类型确定环境名称

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

只要针对项目中的构建配置设置了适当的编译符号,就可以执行类似这样的操作来确定环境名称:

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();
}

关于c# - 如何在 .NET Core MVC 项目中转换 appsettings.json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073959/

相关文章:

c# - 分页在 MVC Webgrid 中不起作用

.net - 默认启用 UnsafeHeaderParsing 是可接受的做法吗?

c# - lambda 表达式含义/修饰

python - 无法从请求打印 JSON

javascript - JSON.stringify() 在值上带有单引号,在键上没有引号

android - 如何将base64编码的音频转换为JSON?

c# - 正则表达式将 url 转换为超链接

C# 在实例对象中锁定对象

c# - 在 C# 中实现 jaccard 相似度

c# - 在 Visual Studio 中替换图像列表中的图像而不更改索引