检查 appsettings.json 的工作原理

更新页 :
页面创建日期 :

环境

Visual Studio
  • Visual Studio 2019
ASP.NET酷
  • 3.0
  • 3.1

入门

创建新的 ASP.NET Core 项目时,应用集.jsonappsettings。 开发.json配置文件 包含在项目中。

此处设置的内容使用appsettings.json中设置的参数。 在开发过程中,同一键的参数是应用程序设置。 使用开发人员.json设置覆盖的内容。

image

我想在本文中看到如何切换和加载它们。

编辑以检查行为

尝试向每个配置文件添加参数,以查看其工作原理。 为每个测试对象添加一个部分,并添加TestValue参数。

appsettings.json 文件是使用 Shift-JIS 字符代码编写的,因此,如果您要输入日语, 请用 UTF-8 保存。

appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "TestObject": {
    "TestValue": "Root です。",
    "Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
  }
}

应用设置。 开发.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "TestObject": {
    "TestValue": "Development です。",
    "Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
  }
}

获取HomeController.cs 索引操作中配置文件的参数。 有一种方法可以获取类,但我喜欢它,因为它不是主题。

private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;

// DI で IConfiguration を受け取る
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
  _logger = logger;
  _configuration = configuration;
}

public IActionResult Index()
{
  // appsettings.json から値を取得します。
  // 階層化されている場合は GetSection を使用します。
  ViewData["Message"] = _configuration.GetSection("TestObject").GetValue<string>("TestValue");
  return View();
}

创建、绑定和加载类时,代码如下所示:

// クラス定義
public class TestObject
{
  public string TestValue { get; set; }
  public string Comment { get; set; }
}

// 読み込み
var testObject = _configuration.GetSection(nameof(TestObject)).Get<TestObject>();

显示视图端 Index.cshtml 中获取的值。

<p>appsettings.json から取得したテキストを表示</p>
<p>@ViewData["Message"]</p>

在本地执行调试

生成并调试项目后,可以应用。 您将看到"开发.json"设置。

image

选择开发端的原因是,在运行 ASP.NET Core 应用时加载环境变量。 设置为ASPNETCORE_ENVIRONMENT的参数设置为应用。 XXXX.json 将加载与XXXX部分匹配的配置文件。

在调试期间,开发人员已设置,这是项目属性的调试选项卡, 您可以看到环境变量已设置。

image

如果尝试将此值更改为其他值,然后执行调试,则 我认为,我们可以确保开发人员不会加载根端。

image

顺便说一下,此参数没有在调试或发布中隔离,因此,即使使用发布执行调试, 使用开发参数。 不能像在 Web.config 中那样在调试或发布中划分它们,但您可以注册多个配置文件。 您可以切换以响应操作,例如检查发布时的设置。

部署到 IIS 并运行

那么,如果将其部署到 IIS 并运行,会发生什么情况? 实际上,在 IIS 中创建站点并放置程序。

image

这将使用预期的路由设置。 因此,在 IIS 中部署程序时,无需担心开发人员设置。

image

如果 IIS 在 ASPNETCORE_ENVIRONMENT 环境变量中具有任何值,则可以在运行时加载配置文件。 从站点设置打开配置编辑器。

image

从"系统.webServer"部分中选择aspNetCore。

image

从位置选择应用程序主机.config。

image

打开环境变量的集合。

image

添加集合。

image

在名称中输入 ASPNETCORE_ENVIRONMENT,然后键入要加载到值中的配置文件的名称。

image

如果重新启动网站并显示 Web 屏幕,您将看到正在加载目标配置文件。

image

总结

初始配置时,在开发时应用。 如果加载了开发人员.json 设置并将其部署到生产环境(如 IIS), 我认为加载应用程序集.json 没有问题。

创建项目时,只有开发,但可以创建多个应用集,也可以将开发部分更改为任何名称。 如果有多个执行位置,则可以创建多个执行位置,然后根据环境设置 ASPNETCORE_ENVIRONMENT 以运行它。