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"
내 환경의 이름은 어디에 있습니까 ?
IWebHostEnvironment
대신 사용해야 합니다.
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
- 앱 비밀 이 개발 환경에서 실행될 때 .
- 다음을 사용하는 환경 변수 구성 공급자를 환경 변수 .
- 명령 줄 구성 공급자를 사용하는 명령 줄 인수 .
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);
}
}
Error CS0266 Cannot implicitly convert type 'Microsoft.AspNetCore.Hosting.IWebHost' to 'Microsoft.AspNetCore.Hosting.IWebHostBuilder'. An explicit conversion exists (are you missing a cast?)
... WebHost.CreateDefaultBuiler (에
다음 과 같은 여러 파일을 만듭니다 .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();
당신은으로 구성 이름을 추가 할 수 있습니다 ASPNETCORE_ENVIRONMENT
에 launchSettings.json
아래와 같이
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58446/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
ASPNETCORE_ENVIRONMENT": "$(Configuration)"
}
}
}
웹 페이지없이 콘솔 앱을 사용할 때 저에게 맞는 버전입니다.
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
IConfigurationRoot configuration = builder.Build();
AppSettings appSettings = new AppSettings();
configuration.GetSection("AppSettings").Bind(appSettings);
.vscode / launch.json 파일은 Visual Studio 및 /Properties/launchSettings.json 파일에서만 사용됩니다. 프로덕션에서 이러한 파일을 사용하지 마십시오.
launchSettings.json 파일 :
프로필 설정이 포함되어 있습니다.
예를 들어 'appSettings.QA.json'파일을 사용하려면 'ASPNETCORE_ENVIRONMENT'를 사용할 수 있습니다. 아래 단계를 따르십시오.