수색…


환경별로 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 또는 DevelopmentStartup 돌아갑니다.

완전한 예 :

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 응용 프로그램을 실행하면 정의 된 환경에있게됩니다.

노트

  1. 평등 사인 ( = 앞뒤에는 공백이 없어야합니다.
  2. 설정이 유지되지 않기 때문에 응용 프로그램을 실행하기 전에 명령 프롬프트가 닫히지 않아야합니다.

PowerShell에서 환경 변수 설정

PowerShell을 사용할 때 setx.exe를 사용하여 환경 변수를 영구적으로 설정할 수 있습니다.

  1. PowerShell 시작

  2. 다음 중 하나를 입력하십시오.

    setx ASPNETCORE_ENVIRONMENT "개발"

    setx ASPNETCORE_ENVIRONMENT "준비"

  3. 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>


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow