asp.net-core
여러 환경 구성
수색…
환경별로 appsetting을 가짐
각 환경에 대해 별도의 appsettings. {EnvironmentName} .json 파일을 만들어야합니다.
- appsettings.Development.json
- appsettings.Staging.json
- appsettings.Production.json
그런 다음 project.json 파일을 열고 "publishOptions"섹션의 "include"에 포함하십시오. 여기에는 게시 할 때 포함될 모든 파일 및 폴더가 나열됩니다.
"publishOptions": {
"include": [
"appsettings.Development.json",
"appsettings.Staging.json",
"appsettings.Production.json"
...
]
}
마지막 단계. Startup 클래스에서 다음을 추가하십시오.
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
설정 소스를 설정하는 생성자에서 :
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
코드에서 환경 이름 가져 오기 / 확인
IHostingEnvironment
유형의 변수 만 IHostingEnvironment
.
환경 명 취득 :
env.EnvironmentName
미리 정의 된
Development
,Staging
,Production
환경의 경우 HostingEnvironmentExtensions 클래스의 확장 메서드를 사용하는 것이 가장 좋습니다.env.IsDevelopment() env.IsStaging() env.IsProduction()
대소 문자를 올바르게 무시합니다 ( HostingEnvironmentExtensions의 다른 확장 메서드 :
env.IsEnvironment("environmentname")
대소 문자 구분 변형 :
env.EnvironmentName == "Development"
여러 환경 구성
이 예제는 서로 다른 Dependency Injection 구성을 가진 여러 환경을 구성하고 하나의 Startup
클래스에서 미들웨어를 분리하는 방법을 보여줍니다.
의와 함께 public void Configure(IApplicationBuilder app)
및 public void ConfigureServices(IServiceCollection services)
방법 중 하나를 사용할 수 있습니다 Configure{EnvironmentName}
및 Configure{EnvironmentName}Services
환경에 따라 구성을 할 수 있습니다.
이 패턴을 사용하면 하나의 메소드 / Startup
클래스를 사용하여 if/else
로직을 많이 쓰지 않고 깨끗하고 분리 된 상태로 유지할 수 있습니다.
public class Startup
{
public void ConfigureServices(IServiceCollection services) { }
public void ConfigureStaggingServices(IServiceCollection services) { }
public void ConfigureProductionServices(IServiceCollection services) { }
public void Configure(IApplicationBuilder app) { }
public void ConfigureStagging(IApplicationBuilder app) { }
public void ConfigureProduction(IApplicationBuilder app) { }
}
Configure{Environmentname}
또는 Configure{Environmentname}Services
를 찾을 수 없으면 각각 Configure
또는 ConfigureServices
바뀝니다.
Startup
클래스에도 동일한 의미가 적용됩니다. ASPNETCORE_ENVIRONMENT
변수가 Production
으로 설정된 경우 StartupProduction
이 사용되며 Stagging
또는 Development
때 Startup
돌아갑니다.
완전한 예 :
public class Startup
{
public Startup(IHostingEnvironment hostEnv)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(hostEnv.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true);
if (hostEnv.IsDevelopment())
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
// This method gets called by the runtime. Use this method to add services to the container
public static void RegisterCommonServices(IServiceCollection services)
{
services.AddScoped<ICommonService, CommonService>();
services.AddScoped<ICommonRepository, CommonRepository>();
}
public void ConfigureServices(IServiceCollection services)
{
RegisterCommonServices(services);
services.AddOptions();
services.AddMvc();
}
public void ConfigureDevelopment(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
app.UseMvc();
}
// No console Logger and debugging tools in this configuration
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
app.UseMvc();
}
}
보기에서 환경 특정 콘텐츠 렌더링
보기에 일부 환경에만 해당하는 일부 내용을 렌더링해야 할 수 있습니다. 이 목표를 달성하려면 환경 태그 도우미를 사용할 수 있습니다.
<environment names="Development">
<h1>This is heading for development environment</h1>
</environment>
<environment names="Staging,Production">
<h1>This is heading for Staging or production environment</h1>
</environment>
Environment 태그 도우미는 현재 환경이 names
속성을 사용하여 지정된 환경 중 하나와 일치하는 경우에만 내용을 렌더링합니다.
명령 줄에서 환경 변수 설정
환경을 Development
설정하려면
SET ASPNETCORE_ENVIRONMENT=Development
이제 Asp.Net Core 응용 프로그램을 실행하면 정의 된 환경에있게됩니다.
노트
- 평등 사인 (
=
앞뒤에는 공백이 없어야합니다. - 설정이 유지되지 않기 때문에 응용 프로그램을 실행하기 전에 명령 프롬프트가 닫히지 않아야합니다.
PowerShell에서 환경 변수 설정
PowerShell을 사용할 때 setx.exe를 사용하여 환경 변수를 영구적으로 설정할 수 있습니다.
PowerShell 시작
다음 중 하나를 입력하십시오.
setx ASPNETCORE_ENVIRONMENT "개발"
setx ASPNETCORE_ENVIRONMENT "준비"
PowerShell 다시 시작
web.config에서 ASPNETCORE_ENVIRONMENT 사용
환경 변수에서 ASPNETCORE_ENVIRONMENT를 사용하지 않고 응용 프로그램의 web.config에서 사용하려는 경우 web.config를 다음과 같이 수정하십시오.
<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>