appsettings.json
개발, 스테이징 및 라이브 환경에 대해 다른 데이터베이스 연결 문자열, webapi 위치 등과 같은 항목에 대해 몇 가지 값을 정의했습니다 .
여러 appsettings.json
파일 (예 appsettings.live.json
: 등)을 보유하고 asp.net 앱이 실행중인 빌드 구성에 따라 사용할 파일을 ‘알게’하는 방법이 있습니까?
답변
조건부 컴파일을 사용할 수 있습니다.
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
#if SOME_BUILD_FLAG_A
.AddJsonFile($"appsettings.flag_a.json", optional: true)
#else
.AddJsonFile($"appsettings.no_flag_a.json", optional: true)
#endif
.AddEnvironmentVariables();
this.configuration = builder.Build();
}
답변
작업 환경의 스크린 샷을 추가했습니다. 몇 시간의 연구 개발 비용이 들었 기 때문입니다.
-
먼저
launch.json
파일에 키를 추가 하십시오.아래 스크린 샷을 참조하여
Development
내 환경으로 추가 했습니다. -
그런 다음 프로젝트
appsettings.{environment}.json
에서 환경 이름이 포함 된 새 파일을 만듭니다 .다음 스크린 샷에서 이름이있는 두 개의 다른 파일을 찾습니다.
appsettings.Development.Json
appSetting.json
-
마지막으로 다음
StartUp
과 같이 클래스에 구성하십시오 .public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); }
-
마지막으로 다음과 같이 명령 줄에서 실행할 수 있습니다.
dotnet run --environment "Development"
"Development"
내 환경의 이름은 어디에 있습니까 ?
답변
.NET Core 3.0 이상용 업데이트
-
CreateDefaultBuilder
구성 개체를 자동으로 빌드하고 시작 클래스에 전달할 수있는 방법을 사용할 수 있습니다 .WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
public class Startup { public Startup(IConfiguration configuration) // automatically injected { Configuration = configuration; } public IConfiguration Configuration { get; } /* ... */ }
-
CreateDefaultBuilder
자동으로 적절한 파일을 포함 하므로 각 환경에 대해 별도의 appsettings 파일을 추가하십시오.appsettings.Environment.json
-
그런 다음 실행 / 디버깅시
ASPNETCORE_ENVIRONMENT
환경 변수를 설정하십시오.
환경 변수 설정 방법
IDE에 따라 dotnet 프로젝트는 일반적으로 환경 변수를 찾는 몇 가지 위치가 있습니다.
-
들어 비주얼 스튜디오 프로젝트> 속성> 디버그> 환경 변수로 이동 :
-
대한 비주얼 스튜디오 코드 편집
.vscode/launch.json
>env
: -
시작 설정을 사용하여 편집하십시오.
Properties/launchSettings.json
>environmentVariables
:Visual Studio의 도구 모음에서도 선택할 수 있습니다.
-
dotnet CLI 사용 위한 적절한 구문을 사용 하여 OS에 따라 환경 변수를 설정
참고 : 응용 프로그램이 함께 실행되면 DOTNET 실행 ,
launchSettings.json
사용 가능한 경우 읽고있다environmentVariables
launchSettings.json 재정의 환경 변수의 설정.
어떻게 Host.CreateDefaultBuilder
작동합니까?
.NET Core 3.0 은 다음 순서로 앱에 대한 기본 구성을 Host.CreateDefaultBuilder
제공하는 기본 초기화를 제공하는 플랫폼 확장 아래에 추가되었습니다 IConfiguration
.
appsettings.json
사용하여 JSON 구성 공급자를 .appsettings.Environment.json
사용하여 JSON 구성 공급자를 . 예를 들면 :
appsettings.Production.json
또는appsettings.Development.json
- 앱 비밀 이 개발 환경에서 실행될 때 .
- 다음을 사용하는 환경 변수 구성 공급자를 환경 변수 .
- 명령 줄 구성 공급자를 사용하는 명령 줄 인수 .
추가 자료-MS Docs
답변
ASP.NET Core에서는 적절한 appsettings.json을위한 빌드 구성 대신 환경 변수를 사용해야합니다.
-
프로젝트> 속성> 디버그> 환경 변수를 마우스 오른쪽 버튼으로 클릭합니다.
-
ASP.NET Core는 적절한 appsettings.json 파일을 사용합니다.
-
이제 다음과 같이 해당 환경 변수를 사용할 수 있습니다.
public Startup(IHostingEnvironment env) { 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(); }
참고 : @Dmitry의 답변 을 사용 하면 예를 들어 문제가 발생할 수 있습니다. Azure에서 appsettings.json 값을 재정의 할 때 .
답변
ConfigurationBuilder
다음 Startup
과 같이 생성자 의 환경 변수와 클래스를 사용할 수 있습니다 .
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
this.configuration = builder.Build();
}
그런 다음 appsettings.xxx.json
“xxx”가 환경 이름 인 필요한 모든 환경에 대한 파일을 만듭니다 . 모든 글로벌 구성 값을 “일반”에 넣을 수 있습니다.appsettings.json
파일에 넣을 수 있고 환경 특정 항목 만 이러한 새 파일에 넣을 수 있습니다.
이제 ASPNETCORE_ENVIRONMENT
특정 환경 값 ( “live”, “staging”, “production”등)으로 호출되는 환경 변수 만 필요합니다 . 개발 환경의 프로젝트 설정에서이 변수를 지정할 수 있으며, 물론 스테이징 및 프로덕션 환경에서도 설정해야합니다. 거기에서하는 방법은 이것이 어떤 종류의 환경인지에 달려 있습니다.
업데이트 : 방금 appsettings.xxx.json
현재 빌드 구성을 기반으로 선택하고 싶다는 것을 깨달았습니다 . 이것은 제안 된 솔루션으로는 달성 할 수 없으며이를 수행 할 방법이 있는지 모르겠습니다. 그러나 “환경 변수”방식은 작동하며 귀하의 접근 방식에 대한 좋은 대안이 될 수 있습니다.
답변
.NET core 2.0 사용자를위한 업데이트 일 뿐이므로 다음을 호출 한 후 응용 프로그램 구성을 지정할 수 있습니다 CreateDefaultBuilder
.
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(ConfigConfiguration)
.UseStartup<Startup>()
.Build();
static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", optional: false, reloadOnChange: true)
.AddJsonFile($"config.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
}
}
답변
-
다음 과 같은 여러 파일을 만듭니다 .
appSettings.$(Configuration).json
appSettings.staging.json
appSettings.production.json
-
프로젝트에서 각 파일을
appSettings.json
다음 위치에 복사하는 사전 빌드 이벤트를 만듭니다 .copy appSettings.$(Configuration).json appSettings.json
-
appSettings.json
Config Builder 에서만 사용하십시오 .var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables(); Configuration = builder.Build();