appsettings.json의 작동 방식 확인
환경
- Visual Studio
-
- Visual Studio 2019
- ASP.NET Core
-
- 3.0
- 3.1
처음에
새 ASP.NET Core 프로젝트를 만들 때 appsettings.json 와 appsettings. Development.json 설정 파일을 프로젝트에 포함 되어 있습니다.
여기에서 설정한 내용은appsettings.json 에 설정 된 매개 변수가 사용 되지만, 개발 시에는 동일한 키의 매개 변수는 appsettings. Development.json 설정을 덮어쓴 다음 폴더가 사용 됩니다.
이들이 어떻게 전환 되 고 로드 되는이 기사에서 확인 하 고 싶습니다.
동작 확인을 위해 편집
운동 동작을 확인 하기 위하여 각각의 설정 파일에 매개 변수를 추가 합니다. 각각 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 설정이 표시 되는 것을 알 수 있습니다.
Development 쪽이 선택 된 이유는 ASP.NET Core 앱을 실행할 때 환경 변수를 로드 하는 있지만, 이 매개 변수로 ASPNETCORE_ENVIRONMENT 에 설정 된 매개 변수가 appsettings. XXXX.json 의 XXXX 부분에 일치 하는 설정 파일을 로드 하도록 설정 되어 있습니다.
디버깅 시에는 Develop 설정 되도록 되어 있으며, 이것은 프로젝트 속성의 디버그 탭 환경 변수에서 설정 된 것을 확인할 수 있습니다.
에이 값을 다른 값으로 변경 하 고 디버그 실행 하면 Development 쪽을 로드할 루트 쪽이 로드 되는 것을 확인할 수 있다고 생각 합니다.
덧붙여이 매개 변수는 Debug 또는 Release에 새겨 있지 않으므로 Release에서 디버깅 실행 해도 Development 매개 변수가 사용 됩니다. Web.config의 때 처럼 Debug 나 Release로 분리 될 수 없지만 프로필이 여러 개 등록 하 여 이러한 전환에 이르러서야 설정을 확인 하는 등의 조치를 할 수 있습니다.
IIS에 배포 하 고 실행
에서는 IIS에 배포 하 고 실행 하면 어떻게 될까요? 실제로 IIS에 사이트를 만든 프로그램을 배포 합니다.
이 쪽은 예상 거리 경로 설정이 사용 됩니다. 그래서 IIS 프로그램을 배포 하려는 경우에는 Develop 설정을 걱정할 필요가 없습니다.
일단 IIS 쪽에서 ASPNETCORE_ENVIRONMENT 환경 변수에 어떤 값을 약간 두면 런타임에 설정 파일을 로드할 수 있습니다. 사이트 설정에서 구성 편집기를 엽니다.
단면도에서 system.webServer 안쪽에 aspNetCore 를 선택 합니다.
위치에서 ApplicationHost.config 를 선택 합니다.
EnvironmentVariables 컬렉션을 엽니다.
컬렉션을 추가 합니다.
Name에 ASPNETCORE_ENVIRONMENT를 입력 하 고 value에 가져오려는 설정 파일의 이름을 입력 합니다.
사이트를 다시 시작 하 여 Web 화면을 표시 하는 경우 해당 설정 파일을 로드 하는 것을 확인할 수 있다고 생각 합니다.
요약
초기 구성 하면 개발자는 appsettings. Development.json 설정이 로드 되 고 IIS 같은 프로덕션 환경에 배포 된 경우 Appsettings.json 로드 될 줄 알았는데 문제가 없다고 생각 합니다.
프로젝트 만들 때 Development 밖에 없지만 appsettings 만들 수도, Development 부분은 원하는 이름으로 바꿀 수도 있습니다. 여러 실행 위치가 있을 때 만들어 놓고 환경에 맞게 ASPNETCORE_ENVIRONMENT를 설정 하 여 운용 하 게 됩니다.