Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set Environment Name (IHostingEnvironment.EnvironmentName)?

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.

like image 768
tsdaemon Avatar asked Feb 01 '15 00:02

tsdaemon


People also ask

How do I create an environment in Configureservices?

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.

How is IWebHostEnvironment set?

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.

What is IHostingEnvironment?

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.


1 Answers

After RC2

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:

Set Environment Name in Azure

Before RC2

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.

Relevant ASP.NET Core Hosting Source Code

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")); } 

Backward Compatibility

The environment key is set with the ASPNETCORE_ENVIRONMENT environment variable. ASPNET_ENV and Hosting:Environment are still supported, but generate a deprecated message warning.

https://docs.asp.net/en/latest/migration/rc1-to-rtm.html

Default Value

The default value is "Production" and is set here.

like image 157
Shaun Luttin Avatar answered Oct 21 '22 12:10

Shaun Luttin