Different ways to set environment variable for .NET Core application

How to setup environment value for .NET Core application on Linux host

.NET Core comes with a great feature for loading different config file based on the environment. Environment is picked up from the host environment variables whether that is Windows on Linux based OS. Three environments (Development, Staging and Production) are fully supported out of the box, but you are free to use any other value that suits your need. For one of my cases I was using environment variable to set the region in which application is running in, so it is a lot flexible.

Note

If environment variable ASPNETCORE_ENVIRONMENT is not set, .NET Core will fallback to default value which is always Production

Depending on which host and how you are running your application, there are various ways to set environment variable value. 

Linux host

Setting environment variable for the current session can be done directly from the bash command line

export ASPNETCORE_ENVIRONMENT=MyEnvironment

This command will set environment variable for the current running session. To set it permanently you have to update bash profile. Depending on which CLI you use and distro location may vary. I usually host on Debian based distro with apt package manager, so most of the snippets will be samples from Debian based machines.

To make it permanent you need to update your bash profile. Use the following command to open bash profile in nano editor.

sudo nano ~/.bashrc

Navigate to the end of the file and add the following line

export ASPNETCORE_ENVIRONMENT=MyEnvironment

Setting the variable in bash profile file will set it permanently only for the currently logged user. If you want to set it permanently on the system level you have to open and edit profile with your editor of choice. As I mentioned I use nano, so the following command will open nano with your system profile file opened

sudo nano /etc/profile

Paste the same line as for the bash profile file

export ASPNETCORE_ENVIRONMENT=MyEnvironment

Linux daemon

If you are running .NET Core application on a Linux host as a daemon, you can declare your environment variables in a .service file which is used to register a daemon

[Service]
# Service environment varaibles
Environment=LANGUAGE=en
Environment=LOG_FOLDER=/tmp/logs/svc
    

Another way to declare environment variables for your daemon/service is to have environment variables file which you link from .service file

[Service]
# Service environment varaibles file
EnvironmentFile=/var/svc/environment.var
    

And the content of environment variables file would be in the following format

LANGUAGE=en
LOG_FOLDER=/tmp/logs/svc
    

 

Windows host

Setting environment variable for the current session on Windows machine can be easily done from the Windows Command prompt.

set ASPNETCORE_ENVIRONMENT="MyEnvironment"

This will set value for the environment variable for the current command process session. Once you close the command prompt this value will be lost. To set it permanently you have two options. 

To set Environment variable from the Windows UI you have to go to Control Panel/System/Advanced system settings and click on Environment Variables... button

Environment

You can also reach this UI dialog by running the following command from the Run dialog (Win+R)

rundll32 sysdm.cpl,EditEnvironmentVariables

After pasting the command above user CTRL+SHIFT+ENTER to run it as elevated to be able to access System variables sections of the dialog.

Run Env Variables

If you find your self more comfortable with command line execute the following line to set current use environment variable value

setx ASPNETCORE_ENVIRONMENT "MyEnvironment"

To set it on the system level you will have to run the same command with /M switch in the elevated (Run as Administrator) console

setx ASPNETCORE_ENVIRONMENT "MyEnvironment" /M

Docker container

If you have your application containerized you can simply set environment variable in docker-compose.yml file with environment section where you can set as many environment variables as you need

version: '3'

services:
  api:
    image: MyCoreApplication_Image
    container_name: MyCoreApplication_Cotainer
    build:
      context: .
    ports:
      - 80:80
    environment:
      ASPNETCORE_ENVIRONMENT: MyEnvironment
    volumes:
      - ./Logs:/app/Logs

    

Dotnet CLI 

This way of setting environment variables if they are not containerized is my favorite because it is OS agnostic. Basically we start our application with environment option and our application will have the environment set to value of the environment argument value.

dotnet MyApplication.dll --environment=MyEnvironment

How do you set .NET Core environment value?

Disclaimer

Purpose of the code contained in snippets or available for download in this article is solely for learning and demo purposes. Author will not be held responsible for any failure or damages caused due to any other usage.


About the author

DEJAN STOJANOVIC

Dejan is a passionate Software Architect/Developer. He is highly experienced in .NET programming platform including ASP.NET MVC and WebApi. He likes working on new technologies and exciting challenging projects

CONNECT WITH DEJAN  Loginlinkedin Logintwitter Logingoogleplus Logingoogleplus

JavaScript

read more

SQL/T-SQL

read more

Umbraco CMS

read more

PowerShell

read more

Comments for this article