Default ASP.NET Core web project contain such lines in Startup.cs
:
if (string.Equals(env.EnvironmentName, "Development", StringComparison.OrdinalIgnoreCase)) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(ErrorPageOptions.ShowAll); } else { app.UseExceptionHandler("/Home/Error"); }
As I understand, the EnvironmentName is a new way to handle Dev/Production environment. But it doesn't changes on Release build configuration. So what is the way to set a different EnvironmentName
?
I can imagine that it should be set in "Commands" as a parameter for server.
Fortunately for us, the answer is simple. You can add it to your Startup constructor: public Startup(IConfiguration configuration, IHostingEnvironment environment) . This will inject an IHostingEnvironment that you can set as a property available to any Startup method.
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. The About page from the sample code displays the value of IWebHostEnvironment.
The IHostingEnvironment is an interface for . Net Core 2.0. The IHostingEnvironment interface need to be injected as dependency in the Controller and then later used throughout the Controller. The IHostingEnvironment interface have two properties.
So what is the way to set a different EnvironmentName?
Set the ASPNETCORE_ENVIRONMENT
environmental variable.
There are many ways to set that environmental variable. These include a launchSettings.json
profile and other environment-specific ways. Here are some examples.
From a console:
// PowerShell > $env:ASPNETCORE_ENVIRONMENT="Development" // Windows Command Line > SET ASPNETCORE_ENVIRONMENT=Development // Bash > ASPNETCORE_ENVIRONMENT=Development
From an Azure Web App's App settings:
I can imagine that it should be set in "Commands" as a parameter for server.
That is true. In your project.json, add --ASPNET_ENV production
as a parameter for the server.
"commands": { "web": "Microsoft.AspNet.Hosting --ASPNET_ENV production --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001" }
Now when you run dnx . web
from the command line, ASPNET_ENV
will be production
.
The WebHostBuilder
combines "ASPNETCORE_"
with the WebHostDefaults.EnvironmentKey
to make "ASPNETCORE_environment"
. It also supports the legacy keys.
WebHostDefaults.cs
namespace Microsoft.AspNetCore.Hosting { public static class WebHostDefaults { public static readonly string ApplicationKey = "applicationName"; public static readonly string StartupAssemblyKey = "startupAssembly"; public static readonly string DetailedErrorsKey = "detailedErrors"; public static readonly string EnvironmentKey = "environment"; public static readonly string WebRootKey = "webroot"; public static readonly string CaptureStartupErrorsKey = "captureStartupErrors"; public static readonly string ServerUrlsKey = "urls"; public static readonly string ContentRootKey = "contentRoot"; } }
WebHostBuilder.cs
_config = new ConfigurationBuilder() .AddEnvironmentVariables(prefix: "ASPNETCORE_") .Build(); if (string.IsNullOrEmpty(GetSetting(WebHostDefaults.EnvironmentKey))) { // Try adding legacy environment keys, never remove these. UseSetting(WebHostDefaults.EnvironmentKey, Environment.GetEnvironmentVariable("Hosting:Environment") ?? Environment.GetEnvironmentVariable("ASPNET_ENV")); }
The environment key is set with the
ASPNETCORE_ENVIRONMENT
environment variable.ASPNET_ENV
andHosting:Environment
are still supported, but generate a deprecated message warning.
https://docs.asp.net/en/latest/migration/rc1-to-rtm.html
The default value is "Production" and is set here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With