ASP.NET Core 라 이브 러 리 항목 에서 설정 파일 을 읽 는 방법 에 대한 자세 한 설명
최근 에 어떤 친구 가.net core 라 이브 러 리 에서 프로필 을 읽 는 방법 을 물 었 습 니 다.그 때 는 얼떨떨 해 졌 습 니 다.이것 이 얼마나 좋 은 지 몰 랐 습 니 다.그래서 이틀 동안 관련 내용 을 알 고 나 서 야 이 글 이 나 왔 습 니 다.정상 적 으로 우 리 는 응용 프로그램 디 렉 터 리 에 app settings.json 파일 이 있 습 니 다.관련 설정 은 모두 이 json 파일 에 놓 여 있 습 니 다.그러나 만약 에 제 가 라 이브 러 리 프로젝트 를 만 들 면 키 나 다른 하 드 인 코딩 이 필요 한 데 이 터 를 JSON 파일 에 두 고.net core 이전에 설정 파일 은 웹.config 이 고 관련 클래스 가 있어 서 노드 의 데 이 터 를 읽 습 니 다.지금 은.net core 에서 json 파일 입 니 다.그러면 우 리 는 어떻게 해 야 합 니까?본문 은 이것으로 운 에 따라 생 겨 났 다.
.NET Core 라 이브 러 리 항목 JSON 프로필 읽 기
프로그램 디 렉 터 리 에 JSON 파일 을 추가 하 는 것 은 다음 과 같 습 니 다.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
그리고 프로필 의 노드 를 읽 습 니 다.다음 과 같 습 니 다.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<BlogViewModel>(Configuration.GetSection("JeffckySettings"));
......
}
그러나 프로젝트 가 라 이브 러 리 에 있다 면 물론 프로그램 에 있 는 appstettings.json 에 설정 값 을 넣 을 수도 있 습 니 다.그러나 json 파일 이 비대 해 보이 지 않도록 라 이브 러 리 에 있 는 설정 데 이 터 를 라 이브 러 리 에 두 고 통일 적 으로 관리 해 야 합 니 다.따라서 라 이브 러 리 에 startup.cs 클래스 를 만 들 수 없습니다.다시 실례 화 Configuration 을 해 보 세 요.이렇게 생각해 도 될 것 같 습 니 다.저 는 시도 해 본 적 이 없습니다.간단 한 방법 이 없 나 요?.net core 이전 처럼 클래스 로 웹.config 를 읽 을 수 없습니다.우 리 는 키 만 제시 하고 값 을 얻 을 수 있 습 니까?또는 강 한 형식 설정 을 통 해 설정 데 이 터 를 통일 적 으로 관리 하 는 것 이 우리 가 시도 하 는 방향 이 어야 합 니 다.자,이렇게 많은 말 을 했 으 니 우 리 는 일 을 시작 하 자.우선.net core 에서 응용 프로그램 경 로 를 어떻게 가 져 왔 는 지 복습 합 니 다..NET Core 가 져 오기 프로그램 경로
.NET 4.X 이전에 현재 응용 프로그램의 루트 디 렉 터 리 경로 와 이름 을 가 져 오 면 다음 을 통 해 가 져 올 수 있 습 니 다.
var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;
물론 빈 디 렉 터 리 대신 아래 와 같이 프로그램 루트 디 렉 터 리 를 가 져 올 수도 있 습 니 다.
Directory.GetCurrentDirectory()
.net core 에서 bin 디 렉 터 리 경 로 를 가 져 오 는 것 은 아래 와 같이 더욱 간결 합 니 다.
AppContext.BaseDirectory
.NET 4.X 전에 프로그램 집합 이름 가 져 오기
Assembly.GetEntryAssembly().GetName().Name;
.net core 에서 아래 와 같이 가 져 오기:
var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;
버 전 은 아래 와 같이 가 져 옵 니 다(.net core 도 마찬가지 입 니 다).
Assembly.GetEntryAssembly().GetName().Version.ToString()
라 이브 러 리 프로젝트 에서 저 희 는 강력 한 형식 설정 을 이용 하여 파일 데 이 터 를 읽 습 니 다.먼저 다음 과 같은 확장 자 를 다운로드 해 야 합 니 다.ConfigurationBuilder 클래스 에서 다음 추가 방법:
//
// :
// Adds a new configuration source.
//
// :
// source:
// The configuration source to add.
//
// :
// The same Microsoft.Extensions.Configuration.IConfigurationBuilder.
public IConfigurationBuilder Add(IConfigurationSource source);
AddJSonFile 확장 방법 에 대해 JSON 파일 이름 을 추가 합 니 다.파일 경 로 는 SetBasePath()방법 을 통 해 이 루어 졌 습 니 다.모든 설정 은 IConfigurationBuilder 인 터 페 이 스 를 기반 으로 합 니 다.그 중에서 JSonConfigurationSource 류 가 있 습 니 다.다음 과 같 습 니 다.
//
// :
// Represents a JSON file as an Microsoft.Extensions.Configuration.IConfigurationSource.
public class JsonConfigurationSource : FileConfigurationSource
{
public JsonConfigurationSource();
//
// :
// Builds the Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
// for this source.
//
// :
// builder:
// The Microsoft.Extensions.Configuration.IConfigurationBuilder.
//
// :
// A Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
public override IConfigurationProvider Build(IConfigurationBuilder builder);
}
부모 클래스 를 다시 보면 JSON 파일 경 로 를 추가 하 는 방법 이 있 습 니 다.다음 과 같 습 니 다.따라서 JSON 파일 을 추가 하 는 방법 은 확장 방법 을 통 해 이 루어 지 는 것 외 에 도 JSON ConfigurationSource 를 직접 예화 하 는 방법 이 있 음 을 알 수 있 습 니 다.다음 과 같 습 니 다.
IConfiguration config = new ConfigurationBuilder()
.SetBasePath(currentClassDir)
.AddJsonFile("appsettings.json", false, true)
.Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
.Build();
위 에서 JSON 파일 을 추가 해도 됩 니 다.JSON 파일 을 추가 하려 면 JSON 파일 이 있 는 디 렉 터 리 를 설정 해 야 합 니 다.먼저 SetBasePath 방법 을 설정 해 야 합 니 다.그렇지 않 으 면 다음 과 같은 오 류 를 보고 할 수 있 습 니 다.테스트 JSON 파일 을 현재 프로젝트(StudyEFCore.Data)에 다음 과 같이 놓 습 니 다.
최종 적 으로 라 이브 러 리 항목 JSON 프로필 을 읽 고 봉인 하면 다음 과 같 습 니 다.
public class JsonConfigurationHelper
{
public T GetAppSettings<T>(string key) where T : class, new()
{
var baseDir = AppContext.BaseDirectory;
var indexSrc = baseDir.IndexOf("src");
var subToSrc = baseDir.Substring(0, indexSrc);
var currentClassDir = subToSrc + "src" + Path.DirectorySeparatorChar + "StutdyEFCore.Data";
IConfiguration config = new ConfigurationBuilder()
.SetBasePath(currentClassDir)
.Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
.Build();
var appconfig = new ServiceCollection()
.AddOptions()
.Configure<T>(config.GetSection(key))
.BuildServiceProvider()
.GetService<IOptions<T>>()
.Value;
return appconfig;
}
}
위 에서 해결 되 지 않 은 문 제 는 현재 라 이브 러 리 프로젝트 의 경 로 를 어떻게 얻 느 냐 하 는 것 입 니 다.좋 은 방법 이 생각 나 지 않 았 습 니 다.이 글 을 본 당신 은 어떤 고견 을 가지 고 있 는 지 모 르 겠 습 니 다.간단 한 호출 은 다음 과 같다.
var config = new JsonConfigurationHelper();
var person = config.GetAppSettings<Person>("JeffckySettings");
var name = person.Name;
var age = person.Age;
결 과 는 다음 과 같다.우 리 는 이 종 류 를 ConfigurationManager 로 수정 한 다음 GetAppSettings 방법 을 정적 방법 으로 정의 합 니 다.마지막 으로 다음 호출 은.net core 전에 웹.config 에서 설정 한 데 이 터 를 읽 는 문 제 를 만족 시 키 는 것 입 니까?하하 하:
var person = ConfigurationManager.GetAppSettings<Person>("JeffckySettings");
총결산이 절 에 서 는.net core 라 이브 러 리 프로젝트 에서 JSON 설정 의 데 이 터 를 어떻게 읽 는 지 상세 하 게 설명 하 였 으 나 아직 부족 합 니 다.당신 은 어떤 고견 을 가지 고 있 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.