Veja como funciona o appsettings.json

Página atualizada :
Data de criação de página :

Ambiente

Estúdio Visual
  • Visual Studio 2019
núcleo ASP.NET
  • 3.0
  • 3.1

No começo

Quando você cria um novo projeto ASP.NET Core, você pode criar appsettings.json e appsettings. O arquivo de configuração development.json é Incluído no projeto.

O que está definido aqui é o parâmetro definido paraappsettings.json. No momento do desenvolvimento, os parâmetros da mesma chave são ajustes. As configurações sobreescritas em Development.json são usadas.

image

Neste artigo, gostaria de ver como eles são trocados e carregados.

Editar para ver como funciona

Tente adicionar parâmetros a cada arquivo de configuração para ver como ele funciona. Adicione uma seção TestObject a cada um e adicione o parâmetroTestValue.

O arquivo appsettings.json é escrito com código de caractere shift-JIS, portanto, se você quiser incluir japonês, Guarde-o novamente no UTF-8.

appsettings.json

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

Appsettings. Desenvolvimento.json

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

Obtém os parâmetros do arquivo de configuração na ação Índice do HomeController.cs. Existe um método de obtenção especificando a classe, mas eu adoro porque não é esse assunto.

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

Se você criar, vincular e carregar uma classe, encontrará código semelhante ao seguinte:

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

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

Exibe o valor obtido em Index.cshtml no lado da exibição.

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

Debug executado localmente

Construa o projeto e depura-o e tente executar as configurações. Você pode ver que as configurações do development.json são exibidas.

image

O desenvolvimento é a razão pela qual as variáveis de ambiente são carregadas quando você executa um aplicativo com ASP.NET Core. O parâmetro definido para ASPNETCORE_ENVIRONMENT como o parâmetro está se afixando. XXXX.json Um arquivo de configuração que corresponde à parte XXXX está agora carregado.

Desenvolver é definido ao depurar, que é a guia de depuração para propriedades do projeto. Você pode ver que ele está definido na variável ambiente.

image

Se você tentar mudar esse valor para um valor diferente e depura-lo, Acho que está confirmado que o lado de desenvolvimento não está carregado e o lado raiz está carregado.

image

A propósito, este parâmetro não é separado por Debug ou Release, então se você depurar com Release, Os parâmetros de desenvolvimento são usados. Debug e Release não podem ser separados, como no web.config, mas você pode registrar vários perfis. Você pode tomar medidas, como verificar as configurações de versão, alternando lá.

Implantar e executar no IIS

Então, o que acontece se você implantar e executá-lo no IIS? Tente realmente criar um site no IIS e implantar o programa.

image

Esta é a configuração da rota programada para ser usada. Então, se você está implantando um programa para o IIS, você não precisa se preocupar em desenvolver configurações.

image

Você pode carregar o arquivo de configuração em tempo de execução se tiver algum valor na variável de ambiente ASPNETCORE_ENVIRONMENT no lado IIS. Abra o editor de configuração a partir das configurações do site.

image

Na seção, selecione aspNetCore em system.webServer.

image

Selecione 'Configuração'config.config do local.

image

Abra o ambienteColeção variáveis.

image

Adicione uma coleção.

image

Digite ASPNETCORE_ENVIRONMENT nome e digite o nome do arquivo de configuração que deseja carregar em valor.

image

Se você reiniciar o site e visualizar a tela da Web, poderá ver que está carregando o arquivo de configuração de destino.

image

Resumo

Se a configuração inicial for o caso, as configurações. Se as configurações do Development.json forem carregadas e implantadas em um ambiente de produção como o IIS, Eu acho que está tudo bem pensar que appsettings.json será carregado.

Você só tem desenvolvimento quando cria um projeto, mas pode criar mais de uma configuração e pode alterar a parte de Desenvolvimento para qualquer nome. Se você tiver mais de um local de execução, por exemplo, você pode criar vários locais e, em seguida, configurar e operar ASPNETCORE_ENVIRONMENT para o seu ambiente.