Core 3.1中的应用程序设置如何在多环境场景中工作

目录

介绍

背景

应用程序设置示例

使用代码

AppSettings.json

AppSettings.dev.json

AppSettings.Development.json

AppSettings.prod.json

ApplSettings.qa.json

兴趣点


 

介绍

多环境是我们在企业中开发软件的过程中非常常见的情况。NET Core 3.1放弃了经典的 Web Config 以使用.json文件,但它超越了它,为开发人员提供了一种非常灵活的方式来在多个环境中配置应用程序。本文探讨Core如何管理此设置以及开发人员如何充分利用它。

.NET Core 3.1允许多个AppSetting允许我们在不同环境中轻松配置应用程序。使用AppSettings.EnvironmentName.json 约定区分每个AppSetting文件 

下载代码演示

背景

Core以如下形式组织AppSettings

  • 一个Appsettings.json
  • 几个可选的AppSettings.environment.json

Core 以下列方式管理这些文件:

  • AppSettings.json总是考虑在应用程序中使用。
  • 根据.NET变量的值仅选择一个环境文件:ASPNETCORE_ENVIRONMENT

此选定文件与常规AppSettings.json合并。在合并中,应用以下规则:

  • 两个文件的所有值都进入最终设置。
  • 如果两个文件中都有一个值,则环境设置文件的值优先并用于应用程序设置。

应用程序设置示例

让我们看一个实际的例子。我们有一个包含两个条目的AppSettings.json

  • environment = default
  • var1 = default

以及包含以下条目的AppSettings.dev.json

  • environment = dev-environment
  • var2 = dev

如下图所示。

如果ASPNETCORE_ENVIRONMENT变量的值为dev,那么当我们构建应用程序时,会选择AppSettings.dev.json并与AppSetting.json合并,如下所示:

 

作为此操作的结果,配置变量如下:

  • environmentdev-environment:因为它们在两个文件中,并且dev的值优先于AppSettings.json
  • var1=default:因为它存在于Appsettings.json
  • var2= dev: 因为它存在于AppSettings.dev.json

使用代码

下载代码演示

要对此进行测试,您可以使用本文附带的项目。让我简要解释一下。

该项目是NET Core 3.1 API的简单API模板,您可以在Visual Studio(TM) 2019中找到它,我们对其进行了修改以最好地展示其AppSettings工作原理。

我们向项目中添加了三个额外的AppSettings文件,以便在三种不同的环境中使用。这是软件开发商公司的正常情况。

 

现在我们使用以下变量配置环境:

AppSettings.json

 

{
  "environment": "default",
  "var1": "default"
}

AppSettings.dev.json

 

{
  "environment": "dev-environment",
  "var2": "dev"
}

AppSettings.Development.json

 

{
  "environment": "Development",
  "var3": "development"
}

AppSettings.prod.json

 

{
  "environment": "Production",
    "var4": "production"
}

ApplSettings.qa.json

 

{
  "environment": "QA",
  "var5": "qa"
}

请注意,我们在每个设置文件中都有变量环境,而在其余的一个文件中只有var1var5

我们在这个应用程序中创建了一个服务来读取应用程序在运行时使用的配置。这使我们能够知道应用程序运行时真正使用了什么。

/// <summary>
 /// Get the real value of the settings
 /// </summary>
 /// <returns></returns>
 [HttpGet]
 [ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
 public IActionResult Get()
 {
     string env = config["environment"];
     string var1 = config["var1"];
     string var2 = config["var2"];
     string var3 = config["var3"];
     string var4 = config["var4"];
     string var5 = config["var5"];

     string ret = Environment.NewLine;
     return Ok($"Environment: {env}{ret}var1:
     {var1}{ret}var2: {var2}{ret}var3: {var3}{ret}var4: {var4}{ret}var5: {var5}");
 }

此外,我们创建了不同的配置文件,允许我们使用不同的ASPNETCORE_ENVIRONMENT值启动应用程序:

 

"API Prod": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/Configuration",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Prod"
      }
    },
    "API Dev": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/Configuration",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Dev"
      }
    },
    "API QA": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/Configuration",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "QA"
      }
    },

构建应用程序,看看当我们使用配置文件Dev启动应用程序时会发生什么:

你应该得到这个:

Environment: dev-environment
var1: default
var2: dev
var3: 
var4: 
var5:

请注意,在我们解释变量Environment时,存在于AppSettings.jsonAppSettings.dev.json中的AppSettings.dev.json值覆盖存在于AppsSettings.json中的值。var1 只存在于AppSettings.json并,并且var2 只有在存在AppSettings.dev.json,并接受其中的值。请注意var3var4var5 没有值,因为它们不存在于任何选定的Appsettings

如果我们运行 QA,结果会有所不同:

Environment: QA
var1: default
var2: 
var3: 
var4: 
var5: qa

您可以继续测试,但它演示了Core在构建过程中如何构建最终设置。

兴趣点

正如我们所看到的,你放在AppSettings.json中的所有变量应该在所有环境中使用,除了该变量也存在于AppSettings.environment.json

组织我们的配置的一种替代方法是将每个缺陷的所有值都放在AppSettings.json中,并在其他配置中重复根据环境而变化的那些值。这个组织看起来很有吸引力,但在我看来会导致现实生活中的问题。

我的建议是在AppSettings.json放入所有配置中相同的值。并放入AppSettings.environment.json,这些值在每个环境中都会发生变化。

这让你更容易得到错误,因为你忘记了一个值,没有默认值,并且服务失败,如果你有机会纠正它。

如果您按缺陷取值,程序可能仍然有效,但是当您在供多个开发人员使用的测试环境中部署时,错误值会造成混淆错误。

例如,您可以指向生产中的URLQA中的其他URL,如果您将QAURL放在AppSettings.json而忘记投入生产,则程序会默默地获取QA值,您无法知道配置是否正确。

如果每个缺陷没有值,您可以防止程序使用有缺陷的配置,例如,在健康检查过程中,您可以检测到URL不正确。

https://www.codeproject.com/Articles/5297151/How-Does-the-Application-settings-in-Core-3-1-Work

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值