appsettings.json의 작동 방식 확인

페이지 업데이트 :
페이지 생성 날짜 :

환경

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

처음에

새 ASP.NET Core 프로젝트를 만들 때 appsettings.jsonappsettings. Development.json 설정 파일을 프로젝트에 포함 되어 있습니다.

여기에서 설정한 내용은appsettings.json 에 설정 된 매개 변수가 사용 되지만, 개발 시에는 동일한 키의 매개 변수는 appsettings. Development.json 설정을 덮어쓴 다음 폴더가 사용 됩니다.

image

이들이 어떻게 전환 되 고 로드 되는이 기사에서 확인 하 고 싶습니다.

동작 확인을 위해 편집

운동 동작을 확인 하기 위하여 각각의 설정 파일에 매개 변수를 추가 합니다. 각각 TestObject 섹션을 추가한 다음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 で保存しなおすこと。"
  }
}

appsettings. Development.json

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

HomeController.cs의 Index 액션 설정 파일의 매개 변수를 가져옵니다. 클래스를 지정 하 여 검색 하는 방법도 있지만, 이번 주제는 없기 때문에 생략 합니다.

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

Development 쪽이 선택 된 이유는 ASP.NET Core 앱을 실행할 때 환경 변수를 로드 하는 있지만, 이 매개 변수로 ASPNETCORE_ENVIRONMENT 에 설정 된 매개 변수가 appsettings. XXXX.jsonXXXX 부분에 일치 하는 설정 파일을 로드 하도록 설정 되어 있습니다.

디버깅 시에는 Develop 설정 되도록 되어 있으며, 이것은 프로젝트 속성의 디버그 탭 환경 변수에서 설정 된 것을 확인할 수 있습니다.

image

에이 값을 다른 값으로 변경 하 고 디버그 실행 하면 Development 쪽을 로드할 루트 쪽이 로드 되는 것을 확인할 수 있다고 생각 합니다.

image

덧붙여이 매개 변수는 Debug 또는 Release에 새겨 있지 않으므로 Release에서 디버깅 실행 해도 Development 매개 변수가 사용 됩니다. Web.config의 때 처럼 Debug 나 Release로 분리 될 수 없지만 프로필이 여러 개 등록 하 여 이러한 전환에 이르러서야 설정을 확인 하는 등의 조치를 할 수 있습니다.

IIS에 배포 하 고 실행

에서는 IIS에 배포 하 고 실행 하면 어떻게 될까요? 실제로 IIS에 사이트를 만든 프로그램을 배포 합니다.

image

이 쪽은 예상 거리 경로 설정이 사용 됩니다. 그래서 IIS 프로그램을 배포 하려는 경우에는 Develop 설정을 걱정할 필요가 없습니다.

image

일단 IIS 쪽에서 ASPNETCORE_ENVIRONMENT 환경 변수에 어떤 값을 약간 두면 런타임에 설정 파일을 로드할 수 있습니다. 사이트 설정에서 구성 편집기를 엽니다.

image

단면도에서 system.webServer 안쪽에 aspNetCore 를 선택 합니다.

image

위치에서 ApplicationHost.config 를 선택 합니다.

image

EnvironmentVariables 컬렉션을 엽니다.

image

컬렉션을 추가 합니다.

image

Name에 ASPNETCORE_ENVIRONMENT를 입력 하 고 value에 가져오려는 설정 파일의 이름을 입력 합니다.

image

사이트를 다시 시작 하 여 Web 화면을 표시 하는 경우 해당 설정 파일을 로드 하는 것을 확인할 수 있다고 생각 합니다.

image

요약

초기 구성 하면 개발자는 appsettings. Development.json 설정이 로드 되 고 IIS 같은 프로덕션 환경에 배포 된 경우 Appsettings.json 로드 될 줄 알았는데 문제가 없다고 생각 합니다.

프로젝트 만들 때 Development 밖에 없지만 appsettings 만들 수도, Development 부분은 원하는 이름으로 바꿀 수도 있습니다. 여러 실행 위치가 있을 때 만들어 놓고 환경에 맞게 ASPNETCORE_ENVIRONMENT를 설정 하 여 운용 하 게 됩니다.