ตรวจสอบวิธีการทํางานของ appsettings.json

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพ แวด ล้อม

สตูดิโอภาพ
  • สตูดิโอภาพ 2019
แกนASP.NET
  • 3.0
  • 3.1

ในตอนแรก

เมื่อคุณสร้างโครงการหลักASP.NETใหม่ คุณสามารถสร้างappsettings.jsonและappsettings ไฟล์คอนฟิก development.jsonคือ รวมอยู่ในโครงการ

สิ่งที่ตั้งค่าที่นี่เป็นพารามิเตอร์ที่ตั้งค่าเป็นappsettings.json ในช่วงเวลาของการพัฒนาพารามิเตอร์ของคีย์เดียวกันเป็นappsettings ใช้การตั้งค่าที่เขียนทับใน Development.json

image

ในบทความนี้ผมอยากจะดูว่าพวกเขาจะสลับและโหลด

แก้ไขเพื่อดูว่าทํางานอย่างไร

ลองเพิ่มพารามิเตอร์ลงในแฟ้มการกําหนดค่าแต่ละแฟ้มเพื่อดูวิธีการทํางาน เพิ่มส่วนTestObjectแต่ละส่วน และเพิ่มพารามิเตอร์TestValue

ไฟล์ appsettings.json ถูกเขียนด้วยรหัสอักขระ SHIFT-JIS ดังนั้นหากคุณต้องการรวมภาษาญี่ปุ่น บันทึกอีกครั้งใน UTF-8

แอป

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

การปรบมือ 1999

{
  "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>

การตรวจแก้จุดบกพร่องรันในเครื่อง

สร้างโครงการ และดีบัก และพยายามเรียกใช้ appsettings คุณจะเห็นว่าการตั้งค่า development.json จะปรากฏขึ้น

image

การพัฒนาเป็นเหตุผลที่ทําไมตัวแปรสภาพแวดล้อมจะถูกโหลดเมื่อคุณเรียกใช้ app ที่มีASP.NETหลัก พารามิเตอร์ที่ตั้งค่าเป็นASPNETCORE_ENVIRONMENTเป็นพารามิเตอร์เป็นappsettings 1999 ไฟล์คอนฟิกที่ตรงกับส่วนXXXXถูกโหลดแล้วในขณะนี้

พัฒนาถูกตั้งค่าเมื่อดีบัก ซึ่งเป็นแท็บตรวจแก้จุดบกพร่องสําหรับคุณสมบัติของโครงการ คุณสามารถดูว่ามีการตั้งค่าในตัวแปรสภาพแวดล้อม

image

ถ้าคุณพยายามที่จะเปลี่ยนค่านี้เป็นค่าที่แตกต่างกัน และดีบัก ผมคิดว่าจะยืนยันว่าด้านการพัฒนาไม่ได้โหลดและด้านรากถูกโหลด

image

โดยวิธีการที่พารามิเตอร์นี้จะไม่แยกโดย Debug หรือนําออกใช้ดังนั้นหากคุณดีบักกับรุ่น พารามิเตอร์การพัฒนามีการใช้ การแก้ปัญหาและ Release ไม่สามารถแยกออกได้เช่นเดียวกับใน web.config แต่คุณสามารถลงทะเบียนหลายโปรไฟล์ได้ คุณสามารถดําเนินการเช่นการตรวจสอบการตั้งค่าการวางจําหน่ายโดยการสลับไปที่นั้น

ปรับใช้และทํางานใน IIS

ดังนั้นจะเกิดอะไรขึ้นถ้าคุณปรับใช้และเรียกใช้ใน IIS? ลองสร้างไซต์ใน IIS และปรับใช้โปรแกรมจริง

image

นี่คือการตั้งค่าเส้นทาง slated ที่จะใช้ ดังนั้นหากคุณกําลังปรับใช้โปรแกรมกับ IIS คุณไม่ต้องกังวลเกี่ยวกับการพัฒนาการตั้งค่า

image

คุณสามารถโหลดแฟ้มการกําหนดค่าในขณะดําเนินการถ้าคุณมีค่าใด ๆ ในตัวแปรสภาพแวดล้อมASPNETCORE_ENVIRONMENTบนด้าน IIS เปิดเอดิเตอร์การกําหนดค่าจากการตั้งค่าไซต์

image

จากส่วน เลือกaspNetCoreในsystem.webเซิร์ฟเวอร์

image

เลือกApplicationHost.configจากตําแหน่ง

image

เปิดคอลเลกชันของตัวแปรสภาพแวดล้อม

image

เพิ่มคอลเลกชัน

image

พิมพ์ ASPNETCORE_ENVIRONMENTในชื่อ แล้วพิมพ์ชื่อของแฟ้มการกําหนดค่าที่คุณต้องการโหลดลงในค่า

image

ถ้าคุณเริ่มต้นไซต์และดูหน้าจอเว็บ คุณจะเห็นว่า คุณกําลังโหลดแฟ้มการกําหนดค่าเป้าหมาย

image

สรุป

หากการกําหนดค่าเริ่มต้นเป็นกรณี appsettings ถ้ามีการโหลดและปรับใช้การตั้งค่า Development.json ในสภาพแวดล้อมการผลิตเช่น IIS ฉันคิดว่ามันตกลงที่จะคิดว่า appsettings.json จะถูกโหลด

คุณมีการพัฒนาเมื่อคุณสร้างโครงการ แต่คุณสามารถสร้าง appsettings มากกว่าหนึ่งและคุณสามารถเปลี่ยนส่วนการพัฒนาเป็นชื่อใด ๆ ถ้าคุณมี ASPNETCORE_ENVIRONMENTสถานที่ดําเนินการมากกว่าหนึ่งแห่ง