ASP.NET Core에서 여러 환경 사용Use multiple environments in ASP.NET Core

작성자: Rick AndersonBy Rick Anderson

ASP.NET Core는 환경 변수를 사용하여 런타임 환경에 따라 앱 동작을 구성합니다.ASP.NET Core configures app behavior based on the runtime environment using an environment variable.

예제 코드 살펴보기 및 다운로드 (다운로드 방법)View or download sample code (how to download)

환경Environments

ASP.NET Core는 앱 시작 시 환경 변수 ASPNETCORE_ENVIRONMENT를 읽고 IWebHostEnvironment.EnvironmentName에 값을 저장합니다.ASP.NET Core reads the environment variable ASPNETCORE_ENVIRONMENT at app startup and stores the value in IWebHostEnvironment.EnvironmentName. ASPNETCORE_ENVIRONMENT를 임의의 값으로 설정할 수 있지만 세 개의 값은 프레임워크에서 제공됩니다.ASPNETCORE_ENVIRONMENT can be set to any value, but three values are provided by the framework:

ASP.NET Core는 앱 시작 시 환경 변수 ASPNETCORE_ENVIRONMENT를 읽고 IHostingEnvironment.EnvironmentName에 그 값을 저장합니다.ASP.NET Core reads the environment variable ASPNETCORE_ENVIRONMENT at app startup and stores the value in IHostingEnvironment.EnvironmentName. ASPNETCORE_ENVIRONMENT를 임의의 값으로 설정할 수 있지만 세 개의 값은 프레임워크에서 제공됩니다.ASPNETCORE_ENVIRONMENT can be set to any value, but three values are provided by the framework:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
    {
        app.UseExceptionHandler("/Error");
    }

    app.UseStaticFiles();
    app.UseMvc();
}

위의 코드는The preceding code:

Environment 태그 도우미IHostingEnvironment.EnvironmentName의 값을 사용하여 요소에 태그를 포함하거나 제외합니다.The Environment Tag Helper uses the value of IHostingEnvironment.EnvironmentName to include or exclude markup in the element:

<environment include="Development">
    <div>&lt;environment include="Development"&gt;</div>
</environment>
<environment exclude="Development">
    <div>&lt;environment exclude="Development"&gt;</div>
</environment>
<environment include="Staging,Development,Staging_2">
    <div>
        &lt;environment include="Staging,Development,Staging_2"&gt;
    </div>
</environment>

Windows 및 macOS에서 환경 변수 및 값은 대/소문자를 구분하지 않습니다.On Windows and macOS, environment variables and values aren't case sensitive. Linux 환경 변수 및 값은 기본적으로 대/소문자를 구분합니다.Linux environment variables and values are case sensitive by default.

개발Development

개발 환경은 프로덕션에서 노출해서는 안 되는 기능을 활성화할 수 있습니다.The development environment can enable features that shouldn't be exposed in production. 예를 들어 ASP.NET Core 템플릿은 개발 환경에서 개발자 예외 페이지를 활성화합니다.For example, the ASP.NET Core templates enable the Developer Exception Page in the development environment.

로컬 컴퓨터 개발을 위한 환경은 프로젝트의 Properties\launchSettings.json 파일에서 설정할 수 있습니다.The environment for local machine development can be set in the Properties\launchSettings.json file of the project. launchSettings.json의 환경 값은 시스템 환경에 설정된 값을 재정의합니다.Environment values set in launchSettings.json override values set in the system environment.

다음 JSON은 launchSettings.json 파일의 세 가지 프로필을 보여줍니다.The following JSON shows three profiles from a launchSettings.json file:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:54339/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    },
    "EnvironmentsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:54340/"
    },
    "Kestrel Staging": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:51997/"
    }
  }
}

참고

launchSettings.jsonapplicationUrl 속성은 서버 URL의 목록을 지정할 수 있습니다.The applicationUrl property in launchSettings.json can specify a list of server URLs. 목록의 URL 사이에 세미콜론을 사용합니다.Use a semicolon between the URLs in the list:

"EnvironmentsSample": {
   "commandName": "Project",
   "launchBrowser": true,
   "applicationUrl": "https://localhost:5001;http://localhost:5000",
   "environmentVariables": {
     "ASPNETCORE_ENVIRONMENT": "Development"
   }
}

dotnet run을 사용하여 앱을 시작하면 "commandName": "Project"를 포함한 첫 번째 프로필이 사용됩니다.When the app is launched with dotnet run, the first profile with "commandName": "Project" is used. commandName의 값은 시작할 웹 서버를 지정합니다.The value of commandName specifies the web server to launch. commandName은 다음 중 하나일 수 있습니다.commandName can be any one of the following:

  • IISExpress
  • IIS
  • Project(Kestrel을 시작합니다.)Project (which launches Kestrel)

dotnet run으로 앱을 시작하는 경우:When an app is launched with dotnet run:

  • 가능한 경우 launchSettings.json을 읽습니다.launchSettings.json is read if available. launchSettings.jsonenvironmentVariables 설정이 환경 변수를 재정의합니다.environmentVariables settings in launchSettings.json override environment variables.
  • 호스팅 환경이 표시됩니다.The hosting environment is displayed.

다음 출력은 dotnet run으로 시작된 앱을 보여 줍니다.The following output shows an app started with dotnet run:

PS C:\Websites\EnvironmentsSample> dotnet run
Using launch settings from C:\Websites\EnvironmentsSample\Properties\launchSettings.json...
Hosting environment: Staging
Content root path: C:\Websites\EnvironmentsSample
Now listening on: http://localhost:54340
Application started. Press Ctrl+C to shut down.

Visual Studio 프로젝트 속성 Debug 탭은 launchSettings.json 파일을 편집할 수 있는 GUI를 제공합니다.The Visual Studio project properties Debug tab provides a GUI to edit the launchSettings.json file:

프로젝트 속성 설정 환경 변수

웹 서버가 다시 시작되기 전에는 프로젝트 프로필의 변경 내용이 적용되지 않을 수 있습니다.Changes made to project profiles may not take effect until the web server is restarted. 해당 환경에 대한 변경 내용을 감지하려면 Kestrel을 다시 시작해야 합니다.Kestrel must be restarted before it can detect changes made to its environment.

경고

launchSettings.json은 암호를 저장하지 않아야 합니다.launchSettings.json shouldn't store secrets. 암호 관리자 도구를 사용하여 로컬 개발에 사용되는 암호를 저장할 수 있습니다.The Secret Manager tool can be used to store secrets for local development.

Visual Studio Code를 사용하는 경우 환경 변수는 .vscode/launch.json 파일에서 설정할 수 있습니다.When using Visual Studio Code, environment variables can be set in the .vscode/launch.json file. 다음 예제는 환경을 Development로 설정합니다.The following example sets the environment to Development:

{
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (web)",

            ... additional VS Code configuration settings ...

            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            }
        }
    ]
}

Properties/launchSettings.json과 같은 방식으로 dotnet run을 사용하여 앱을 시작할 때 프로젝트의 .vscode/launch.json 파일은 읽히지 않습니다.A .vscode/launch.json file in the project isn't read when starting the app with dotnet run in the same way as Properties/launchSettings.json. launchSettings.json 파일이 없는 개발 환경에서 앱을 시작할 때는 dotnet run 명령에 대한 환경 변수 또는 명령줄 인수로 환경을 설정합니다.When launching an app in development that doesn't have a launchSettings.json file, either set the environment with an environment variable or a command-line argument to the dotnet run command.

ProductionProduction

프로덕션 환경은 보안, 성능 및 앱 견고성을 최대화하도록 구성되어야 합니다.The production environment should be configured to maximize security, performance, and app robustness. 개발과 다른 몇 가지 일반적인 설정은 다음과 같습니다.Some common settings that differ from development include:

  • 캐싱.Caching.
  • 클라이언트 쪽 리소스가 번들로 제공되고, 축소되며, 잠재적으로 CDN에서 처리됩니다.Client-side resources are bundled, minified, and potentially served from a CDN.
  • 진단 오류 페이지를 사용하지 않습니다.Diagnostic error pages disabled.
  • 친숙한 오류 페이지를 사용하도록 설정합니다.Friendly error pages enabled.
  • 프로덕션 로깅 및 모니터링을 사용합니다.Production logging and monitoring enabled. 예: Application Insights.For example, Application Insights.

환경 설정Set the environment

환경 변수 또는 플랫폼 설정을 사용하여 테스트하기 위해 특정 환경을 설정하면 유용한 경우가 많습니다.It's often useful to set a specific environment for testing with an environment variable or platform setting. 환경을 설정하지 않으면 대부분의 디버깅 기능을 사용하지 않는 Production으로 기본값이 지정됩니다.If the environment isn't set, it defaults to Production, which disables most debugging features. 환경을 설정하는 방법은 운영 체제에 따라 다릅니다.The method for setting the environment depends on the operating system.

호스트를 빌드할 때 앱에서 읽은 마지막 환경 설정에 따라 앱의 환경이 결정됩니다.When the host is built, the last environment setting read by the app determines the app's environment. 앱을 실행하는 동안에는 앱 환경을 변경할 수 없습니다.The app's environment can't be changed while the app is running.

환경 변수 또는 플랫폼 설정Environment variable or platform setting

Azure App ServiceAzure App Service

Azure App Service에서 환경을 설정하려면 다음 단계를 수행합니다.To set the environment in Azure App Service, perform the following steps:

  1. App Services 블레이드에서 앱을 선택합니다.Select the app from the App Services blade.
  2. SETTINGS 그룹에서 애플리케이션 설정 블레이드를 선택합니다.In the SETTINGS group, select the Application settings blade.
  3. 애플리케이션 설정 영역에서 새 설정 추가를 선택합니다.In the Application settings area, select Add new setting.
  4. 이름ASPNETCORE_ENVIRONMENT를 입력합니다.For Enter a name, provide ASPNETCORE_ENVIRONMENT. 에는 환경을 입력합니다(예: Staging).For Enter a value, provide the environment (for example, Staging).
  5. 배포 슬롯을 교환할 때 환경 설정을 현재 슬롯으로 유지하려면 슬롯 설정 확인란을 선택합니다.Select the Slot Setting check box if you wish the environment setting to remain with the current slot when deployment slots are swapped. 자세한 내용은 Azure 설명서: 교환된 설정은? 를 참조하세요.For more information, see Azure Documentation: Which settings are swapped?.
  6. 블레이드 상단에서 저장을 선택합니다.Select Save at the top of the blade.

Azure App Service는 Azure 포털에서 앱 설정(환경 변수)이 추가, 변경 또는 삭제된 후 앱을 자동으로 다시 시작합니다.Azure App Service automatically restarts the app after an app setting (environment variable) is added, changed, or deleted in the Azure portal.

WindowsWindows

앱이 dotnet run을 사용하여 시작할 때 현재 세션에 대한 ASPNETCORE_ENVIRONMENT를 설정하려면 다음 명령이 사용됩니다.To set the ASPNETCORE_ENVIRONMENT for the current session when the app is started using dotnet run, the following commands are used:

명령 프롬프트Command prompt

set ASPNETCORE_ENVIRONMENT=Development

PowerShellPowerShell

$Env:ASPNETCORE_ENVIRONMENT = "Development"

이 명령들은 현재 창에만 적용됩니다.These commands only take effect for the current window. 창이 닫히면 ASPNETCORE_ENVIRONMENT 설정이 기본 설정 또는 컴퓨터 값으로 되돌아갑니다.When the window is closed, the ASPNETCORE_ENVIRONMENT setting reverts to the default setting or machine value.

Windows에서 전역적으로 값을 설정하려면 다음 방법 중 하나를 사용합니다.To set the value globally in Windows, use either of the following approaches:

  • 제어판 > 시스템 > 고급 시스템 설정을 열고 ASPNETCORE_ENVIRONMENT 값을 추가하거나 편집합니다.Open the Control Panel > System > Advanced system settings and add or edit the ASPNETCORE_ENVIRONMENT value:

    시스템 고급 속성

    ASPNET Core 환경 변수

  • 관리자 권한의 명령 프롬프트를 열고 setx 명령을 사용하거나 관리자 권한의 PowerShell 명령 프롬프트를 열고 [Environment]::SetEnvironmentVariable을 사용합니다.Open an administrative command prompt and use the setx command or open an administrative PowerShell command prompt and use [Environment]::SetEnvironmentVariable:

    명령 프롬프트Command prompt

    setx ASPNETCORE_ENVIRONMENT Development /M
    

    /M 스위치는 시스템 수준에서 환경 변수를 설정함을 나타냅니다.The /M switch indicates to set the environment variable at the system level. /M 스위치를 사용하지 않으면 환경 변수가 사용자 계정에 대해 설정됩니다.If the /M switch isn't used, the environment variable is set for the user account.

    PowerShellPowerShell

    [Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")
    

    Machine 옵션 값은 시스템 수준에서 환경 변수를 설정함을 나타냅니다.The Machine option value indicates to set the environment variable at the system level. 옵션 값이 User로 변경되면 환경 변수가 사용자 계정에 대해 설정됩니다.If the option value is changed to User, the environment variable is set for the user account.

ASPNETCORE_ENVIRONMENT 환경 변수를 전역적으로 설정하면 값이 설정된 후 열리는 모든 명령 창에서 dotnet run에 대해 적용됩니다.When the ASPNETCORE_ENVIRONMENT environment variable is set globally, it takes effect for dotnet run in any command window opened after the value is set.

web.configweb.config

web.config를 사용하여 ASPNETCORE_ENVIRONMENT 환경 변수를 설정하려면 ASP.NET Core 모듈환경 변수 설정 섹션을 참조하세요.To set the ASPNETCORE_ENVIRONMENT environment variable with web.config, see the Setting environment variables section of ASP.NET Core 모듈.

프로젝트 파일 또는 게시 프로필Project file or publish profile

Windows IIS 배포의 경우: <EnvironmentName> 속성을 게시 프로필( .pubxml) 또는 프로젝트 파일에 포함합니다.For Windows IIS deployments: Include the <EnvironmentName> property in the publish profile (.pubxml) or project file. 이 방법은 프로젝트가 게시될 때 web.config에 환경을 설정합니다.This approach sets the environment in web.config when the project is published:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

IIS 응용 프로그램 풀 별Per IIS Application Pool

격리된 응용 프로그램 풀에서 실행되는(IIS 10.0 이상에서 지원됨) 앱에 대한 ASPNETCORE_ENVIRONMENT 환경 변수를 설정하려면, 환경 변수 <environmentVariables> 항목의 AppCmd.exe 명령 섹션을 참조하세요.To set the ASPNETCORE_ENVIRONMENT environment variable for an app running in an isolated Application Pool (supported on IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic. ASPNETCORE_ENVIRONMENT 환경 변수를 앱 풀에 대해 설정하면 해당 값이 시스템 수준의 설정을 재정의합니다.When the ASPNETCORE_ENVIRONMENT environment variable is set for an app pool, its value overrides a setting at the system level.

중요

IIS에서 앱을 호스팅하고 ASPNETCORE_ENVIRONMENT 환경 변수를 추가 또는 변경하는 경우 다음 방법 중 하나를 사용하여 앱에서 새 값을 가져옵니다.When hosting an app in IIS and adding or changing the ASPNETCORE_ENVIRONMENT environment variable, use any one of the following approaches to have the new value picked up by apps:

  • 명령 프롬프트에서 net stop was /y 다음에 net start w3svc를 실행합니다.Execute net stop was /y followed by net start w3svc from a command prompt.
  • 서버를 다시 시작합니다.Restart the server.

macOSmacOS

macOS에 대한 현재 환경 설정은 앱을 실행할 때 인라인으로 수행할 수 있습니다.Setting the current environment for macOS can be performed in-line when running the app:

ASPNETCORE_ENVIRONMENT=Development dotnet run

또는 앱을 실행하기 전에 export를 사용하여 환경을 설정합니다.Alternatively, set the environment with export prior to running the app:

export ASPNETCORE_ENVIRONMENT=Development

컴퓨터 수준 환경 변수는 .bashrc 또는 .bash_profile 파일에서 설정됩니다.Machine-level environment variables are set in the .bashrc or .bash_profile file. 임의의 텍스트 편집기를 사용하여 파일을 편집합니다.Edit the file using any text editor. 다음 명령문을 추가합니다.Add the following statement:

export ASPNETCORE_ENVIRONMENT=Development

LinuxLinux

Linux 배포판의 경우 세션 기반 변수 설정을 위해 명령 프롬프트에서 export 명령을 사용하거나 컴퓨터 수준 환경 설정을 위해 bash_profile 파일을 사용합니다.For Linux distros, use the export command at a command prompt for session-based variable settings and bash_profile file for machine-level environment settings.

코드에서 환경 설정Set the environment in code

호스트를 빌드할 때 UseEnvironment를 호출합니다.Call UseEnvironment when building the host. .NET 일반 호스트을 참조하세요.See .NET 일반 호스트.

호스트를 빌드할 때 UseEnvironment를 호출합니다.Call UseEnvironment when building the host. ASP.NET Core 웹 호스트을 참조하세요.See ASP.NET Core 웹 호스트.

환경별 구성Configuration by environment

환경별 구성을 로드하려면 다음을 권장합니다.To load configuration by environment, we recommend:

환경에 따른 시작 클래스 및 메서드Environment-based Startup class and methods

IWebHostEnvironment를 Startup.Configure에 삽입Inject IWebHostEnvironment into Startup.Configure

Startup.ConfigureIWebHostEnvironment를 삽입합니다.Inject IWebHostEnvironment into Startup.Configure. 이 접근 방식은 앱에서 환경별 코드 차이가 최소인 몇 가지 환경의 Startup.Configure만 조정해야 하는 경우에 유용합니다.This approach is useful when the app only requires adjusting Startup.Configure for a few environments with minimal code differences per environment.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Development environment code
    }
    else
    {
        // Code for all other environments
    }
}

IWebHostEnvironment를 Startup 클래스에 삽입Inject IWebHostEnvironment into the Startup class

Startup 생성자에 IWebHostEnvironment를 삽입합니다.Inject IWebHostEnvironment into the Startup constructor. 이 접근 방식은 앱에서 환경별 코드 차이가 최소인 몇 가지 환경만 Startup을 구성해야 하는 경우에 유용합니다.This approach is useful when the app requires configuring Startup for only a few environments with minimal code differences per environment.

다음 예제에서는In the following example:

  • 환경은 _env 필드에 유지됩니다.The environment is held in the _env field.
  • _envConfigureServicesConfigure에서 사용되어 앱의 환경에 따라 시작 구성을 적용합니다._env is used in ConfigureServices and Configure to apply startup configuration based on the app's environment.
public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IWebHostEnvironment env)
    {
        _env = env;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
            // Development environment code
        }
        else if (_env.IsStaging())
        {
            // Staging environment code
        }
        else
        {
            // Code for all other environments
        }
    }

    public void Configure(IApplicationBuilder app)
    {
        if (_env.IsDevelopment())
        {
            // Development environment code
        }
        else
        {
            // Code for all other environments
        }
    }
}

IHostingEnvironment를 Startup.Configure에 삽입Inject IHostingEnvironment into Startup.Configure

Startup.ConfigureIHostingEnvironment를 삽입합니다.Inject IHostingEnvironment into Startup.Configure. 이 접근 방식은 앱에서 환경별 코드 차이가 최소인 몇 가지 환경만 Startup.Configure를 구성해야 하는 경우에 유용합니다.This approach is useful when the app only requires configuring Startup.Configure for only a few environments with minimal code differences per environment.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Development environment code
    }
    else
    {
        // Code for all other environments
    }
}

IHostingEnvironment를 Startup 클래스에 삽입Inject IHostingEnvironment into the Startup class

Startup 생성자에 IHostingEnvironment를 삽입하고 Startup 클래스 전체에서 하기 위해 서비스를 필드에 할당합니다.Inject IHostingEnvironment into the Startup constructor and assign the service to a field for use throughout the Startup class. 이 접근 방식은 앱에서 환경별 코드 차이가 최소인 몇 가지 환경만 시작을 구성해야 하는 경우에 유용합니다.This approach is useful when the app requires configuring startup for only a few environments with minimal code differences per environment.

다음 예제에서는In the following example:

  • 환경은 _env 필드에 유지됩니다.The environment is held in the _env field.
  • _envConfigureServicesConfigure에서 사용되어 앱의 환경에 따라 시작 구성을 적용합니다._env is used in ConfigureServices and Configure to apply startup configuration based on the app's environment.
public class Startup
{
    private readonly IHostingEnvironment _env;

    public Startup(IHostingEnvironment env)
    {
        _env = env;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
            // Development environment code
        }
        else if (_env.IsStaging())
        {
            // Staging environment code
        }
        else
        {
            // Code for all other environments
        }
    }

    public void Configure(IApplicationBuilder app)
    {
        if (_env.IsDevelopment())
        {
            // Development environment code
        }
        else
        {
            // Code for all other environments
        }
    }
}

시작 클래스 규칙Startup class conventions

ASP.NET Core 앱이 시작되면 Startup 클래스가 앱을 부트스트랩합니다.When an ASP.NET Core app starts, the Startup class bootstraps the app. 앱은 다양한 환경에 대한 별도의 Startup 클래스를 정의할 수 있습니다(예: StartupDevelopment).The app can define separate Startup classes for different environments (for example, StartupDevelopment). 런타임에 적절한 Startup 클래스가 선택됩니다.The appropriate Startup class is selected at runtime. 이름 접미사가 현재 환경과 일치하는 클래스에 우선 순위가 부여됩니다.The class whose name suffix matches the current environment is prioritized. 일치하는 Startup{EnvironmentName} 클래스를 찾을 수 없으면 Startup 클래스가 사용됩니다.If a matching Startup{EnvironmentName} class isn't found, the Startup class is used. 이 접근 방식은 앱에서 환경별 코드 차이가 최소인 몇 가지 환경의 시작을 구성해야 하는 경우에 유용합니다.This approach is useful when the app requires configuring startup for several environments with many code differences per environment.

환경 기반 Startup 클래스를 구현하려면 사용 중인 각 환경에 대한 Startup{EnvironmentName} 클래스와 폴백 Startup 클래스를 만듭니다.To implement environment-based Startup classes, create a Startup{EnvironmentName} class for each environment in use and a fallback Startup class:

// Startup class to use in the Development environment
public class StartupDevelopment
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}

// Startup class to use in the Production environment
public class StartupProduction
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}

// Fallback Startup class
// Selected if the environment doesn't match a Startup{EnvironmentName} class
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}

어셈블리 이름을 허용하는 UseStartup(IWebHostBuilder, String) 오버로드를 사용합니다.Use the UseStartup(IWebHostBuilder, String) overload that accepts an assembly name:

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
    var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;

    return WebHost.CreateDefaultBuilder(args)
        .UseStartup(assemblyName);
}

시작 메서드 규칙Startup method conventions

ConfigureConfigureServicesConfigure<EnvironmentName>Configure<EnvironmentName>Services 양식의 환경 특정 버전을 지원합니다.Configure and ConfigureServices support environment-specific versions of the form Configure<EnvironmentName> and Configure<EnvironmentName>Services. 이 접근 방식은 앱에서 환경별 코드 차이가 최소인 몇 가지 환경의 시작을 구성해야 하는 경우에 유용합니다.This approach is useful when the app requires configuring startup for several environments with many code differences per environment.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        StartupConfigureServices(services);
    }

    public void ConfigureStagingServices(IServiceCollection services)
    {
        StartupConfigureServices(services);
    }

    private void StartupConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
        {
            app.UseExceptionHandler("/Error");
        }

        app.UseStaticFiles();
        app.UseMvc();
    }

    public void ConfigureStaging(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (!env.IsStaging())
        {
            throw new Exception("Not staging.");
        }

        app.UseExceptionHandler("/Error");
        app.UseStaticFiles();
        app.UseMvc();
    }
}

추가 자료Additional resources