Scopri come funziona appsettings.json

Pagina aggiornata :
Data di creazione della pagina :

Ambiente

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

In un primo momento

Quando si crea un nuovo progetto ASP.NET Core, è possibile creare appsettings.json e appsettings. Il file di configurazione development.json è Incluso nel progetto.

Ciò che è impostato qui è il parametro impostato suappsettings.json. Al momento dello sviluppo, i parametri della stessa chiave sono appsettings. Vengono utilizzate le impostazioni sovrascritte in Development.json.

image

In questo articolo, mi piacerebbe vedere come vengono commutati e caricati.

Modifica per vedere come funziona

Provare ad aggiungere parametri a ogni file di configurazione per verificarne il funzionamento. Aggiungere una sezione TestObject a ognuna di esse e aggiungere il parametroTestValue.

Il file appsettings.json viene scritto con codice carattere shift-JIS, quindi se si desidera includere il giapponese, Salvarlo nuovamente in UTF-8.

appsettings.json

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

Appsettings. Development.json

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

Ottiene i parametri del file di configurazione nell'azione Indice del HomeController.cs. C'è un metodo per ottenere specificando la classe, ma mi piace perché non è questo argomento.

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 si crea, si associa e si carica una classe, verrà trovato codice simile al seguente:If you create, bind, and load a class, you will find code similar to the following:

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

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

Visualizza il valore ottenuto in Index.cshtml sul lato della visualizzazione.

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

Eseguire il debug in locale

Compilare il progetto ed eseguirne il debug e provare a eseguire le impostazioni dell'app. Si può vedere che vengono visualizzate le impostazioni development.json.

image

Lo sviluppo è il motivo per cui le variabili di ambiente vengono caricate quando si esegue un'app con ASP.NET Core.Development is the reason why environment variables are loaded when you run an app with ASP.NET Core. Il parametro impostato su ASPNETCORE_ENVIRONMENT come parametro è appsettings. XXXX.json Viene ora caricato un file di configurazione che corrisponde alla parte XXXX.

Lo sviluppo viene impostato durante il debug, ovvero la scheda di debug per le proprietà del progetto. Si può vedere che è impostato nella variabile di ambiente.

image

Se si tenta di modificare questo valore su un valore diverso ed eseguirne il debug, Penso che sia confermato che il lato di sviluppo non è caricato e il lato radice viene caricato.

image

A proposito, questo parametro non è separato da Debug o Release, quindi se si esegue il debug con Release, Vengono utilizzati i parametri di sviluppo. Debug e Release non possono essere separati, come in web.config, ma è possibile registrare più profili. È possibile eseguire un'azione, ad esempio controllare le impostazioni di rilascio passando da un'ora all'altra.

Distribuire ed eseguire in IIS

Cosa succede quindi se lo si distribuisce ed esegui in IIS? Provare a creare un sito in IIS e distribuire il programma.

image

Questo è l'impostazione del percorso prevista per essere utilizzata. Pertanto, se si distribuisce un programma in IIS, non è necessario preoccuparsi di sviluppare le impostazioni.

image

È possibile caricare il file di configurazione in fase di esecuzione se si dispone di qualsiasi valore nella variabile di ambiente ASPNETCORE_ENVIRONMENT sul lato IIS. Aprire l'editor di configurazione dalle impostazioni del sito.

image

Nella sezione selezionare aspNetCore in system.webServer.

image

Selezionare ApplicationHost.config dal percorso.

image

Aprire la raccolta environmentVariables.Open the environmentVariables collection.

image

Aggiungere una raccolta.

image

Digitare ASPNETCORE_ENVIRONMENT nel nome e quindi digitare il nome del file di configurazione che si desidera caricare nel valore.

image

Se si riavvia il sito e si visualizza la schermata Web, è possibile che si stia caricando il file di configurazione di destinazione.

image

Riepilogo

In caso di configurazione iniziale, le impostazioni dell'app. Se le impostazioni di Development.json vengono caricate e distribuite in un ambiente di produzione come IIS, Penso che sia ok pensare che appsettings.json verrà caricato.

Si dispone di sviluppo solo quando si crea un progetto, ma è possibile creare più di un appsettings e modificare la parte sviluppo a qualsiasi nome. Se si dispone di più sedi di esecuzione, ad esempio, è possibile creare più ubicazioni e quindi impostare e gestire ASPNETCORE_ENVIRONMENT per l'ambiente.