120

Running my ASP.NET Core application using DNX, I was able to set environment variables from the command line and then run it like this:

set ASPNET_ENV = Production
dnx web

Using the same approach in 1.0:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

does not work - the application does not seem to be able to read environment variables.

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));

returns null

What am I missing?

1
  • I've added an environment variable under system and user but when I pull them all I don't see the one I added. Does this only work in production environments? Commented Aug 24, 2018 at 14:12

4 Answers 4

191

Your problem is spaces around =.

This will work (attention to space before closing quote):

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT "));

The space after ASPNETCORE_ENVIRONMENT in this code is not a typo! The problem in the question was having extra space (in SET...), so you must use the same space in GetEnvironmentVariable().

As noted by Isantipov in a comment, an even better solution is to remove the spaces entirely from the SET command:

set ASPNETCORE_ENVIRONMENT=Production
Sign up to request clarification or add additional context in comments.

7 Comments

Dmitry, where should we execute this "SET" command ... in CommandPrompt??
Aswartha, It depends on your machine/scenario. You can run this in command prompt before "dotnet run" (in same command prompt) if starting from command prompt, or add to "My Computer" environment variables (for all apps on current machine), or into launchSettings (when staring from VS), or to WebApp configuration when running in Azure.
Okay, and what happens if we have = sign or space ` ` as part of environment variable value? How should we assign/fetch those?
If you have "strange" chars in value - no problem. Open command prompt, run set myvar=bla=bla bla and then echo %myvar% - you will see bla=bla bla
You wouldn't want to use 'ASPNETCORE_ENVIRONMENT ' (with a trailing space) - there are features in aspnet core which depend on the value of 'ASPNETCORE_ENVIRONMENT'(no trailing space) - e.g. resolving of appsettings.Development.json vs appsettings.Production.json. (I've added a bit of detail too long to be posted in a comment here: stackoverflow.com/a/47884810/1990682 )
|
32

This should really be a comment to this answer by @Dmitry (but it is too long, hence I post it as a separate answer):

You wouldn't want to use 'ASPNETCORE_ENVIRONMENT ' (with a trailing space) - there are features in ASP.NET Core which depend on the value of 'ASPNETCORE_ENVIRONMENT'(no trailing space) - e.g. resolving of appsettings.Development.json vs appsettings.Production.json. (e.g. see Working with multiple environments documentation article

And also I guess if you'd like to stay purely inside ASP.NET Core paradigm, you'd want to use IHostingEnvironment.Environment(see documentation) property instead of reading from Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") directly (although the former is of course set from the latter). E.g. in Startup.cs

public class Startup
{
    //<...>

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        Console.WriteLine("HostingEnvironmentName: '{0}'", env.EnvironmentName);
        //<...>
    }

    //<...>
}

2 Comments

can you read Environment.GetEnvironmentVariable in Startup.cs I'm looking for a particular machine value
@djack109 I think you should be able to, unless dotnet core blocks it specifically somehow.
8

If you create the Environment variables at runtime during development then you will get null every time. You have to restart the visual studio because VS read EV at startup only.

1 Comment

I realized about my mistake only after watching your message. Thank you very much @Umer Waheed
0

You can't read any environment variables from an asp.net core app running on IIS anymore since Win2012R2 Server. I believe this was intentional.

1 Comment

Could you be more specific about the scenario you're describing? I know for a fact that a .NET 6 IIS site (in my case) can read environment variables.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.