Skip to main content

ASP.NET Core Configuration - System.ArgumentException: Item has already been added.

In ASP.NET Core you can specify an environment by setting the 'ASPNETCORE_ENVIRONMENT'  environment variable on your server. Yesterday however I wanted to setup a second environment on the same machine. To achieve this I added a second website to IIS and set the environment variable through a parameter in my web.config:

Unfortunately after doing that my application no longer worked. In the Event Viewer I could see the following error message:

Application: dotnet.exe

CoreCLR Version: 4.6.26628.5

Description: The process was terminated due to an unhandled exception.

Exception Info: System.ArgumentException: Item has already been added. Key in dictionary: 'ASPNETCORE_ENVIRONMENT'  Key being added: 'ASPNETCORE_ENVIRONMENT'

   at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)

   at System.Environment.ToHashtable(IEnumerable`1 pairs)

   at System.Environment.GetEnvironmentVariables()

   at Microsoft.Extensions.Configuration.EnvironmentVariables.EnvironmentVariablesConfigurationProvider.Load()

   at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)

   at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()

   at Microsoft.AspNetCore.Hosting.WebHostBuilder..ctor()

   at Web.Program.Main(String[] args) in c:\Program.cs:line 10

It seems that ASP.NET Core doesn’t like that you try to set the same variable twice. Strange because I thought it worked on a previous version of .NET Core(I’m running on 2.1at the moment).

To fix it, I had to remove the environment variable from the system(restart the system) and set the environment for all applications through the web.config.

Anyone with a better solution?