How do I get the Development/Staging/production Hosting Environment in the ConfigureServices
method in Startup?
public void ConfigureServices(IS
Set an environment variable called ASPNETCORE_ENVIRONMENT
with the name of the environment (e.g. Production
). Then do one of two things:
IHostingEnvironment
into Startup.cs
, then use that (env
here) to check: env.IsEnvironment("Production")
. Do not check using env.EnvironmentName == "Production"
!Startup
classes or individual Configure
/ConfigureServices
functions. If a class or the functions match these formats, they will be used instead of the standard options on that environment.
Startup{EnvironmentName}()
(entire class) || example: StartupProduction()
Configure{EnvironmentName}()
|| example: ConfigureProduction()
Configure{EnvironmentName}Services()
|| example: ConfigureProductionServices()
The .NET Core docs describe how to accomplish this. Use an environment variable called ASPNETCORE_ENVIRONMENT
that's set to the environment you want, then you have two choices.
From the docs:
The
IHostingEnvironment
service provides the core abstraction for working with environments. This service is provided by the ASP.NET hosting layer, and can be injected into your startup logic via Dependency Injection. The ASP.NET Core web site template in Visual Studio uses this approach to load environment-specific configuration files (if present) and to customize the app’s error handling settings. In both cases, this behavior is achieved by referring to the currently specified environment by callingEnvironmentName
orIsEnvironment
on the instance ofIHostingEnvironment
passed into the appropriate method.
NOTE: Checking the actual value of env.EnvironmentName
is not recommended!
If you need to check whether the application is running in a particular environment, use
env.IsEnvironment("environmentname")
since it will correctly ignore case (instead of checking ifenv.EnvironmentName == "Development"
for example).
From the docs:
When an ASP.NET Core application starts, the
Startup
class is used to bootstrap the application, load its configuration settings, etc. (learn more about ASP.NET startup). However, if a class exists namedStartup{EnvironmentName}
(for exampleStartupDevelopment
), and theASPNETCORE_ENVIRONMENT
environment variable matches that name, then thatStartup
class is used instead. Thus, you could configureStartup
for development, but have a separateStartupProduction
that would be used when the app is run in production. Or vice versa.In addition to using an entirely separate
Startup
class based on the current environment, you can also make adjustments to how the application is configured within aStartup
class. TheConfigure()
andConfigureServices()
methods support environment-specific versions similar to theStartup
class itself, of the formConfigure{EnvironmentName}()
andConfigure{EnvironmentName}Services()
. If you define a methodConfigureDevelopment()
it will be called instead ofConfigure()
when the environment is set to development. Likewise,ConfigureDevelopmentServices()
would be called instead ofConfigureServices()
in the same environment.