'Override App.config value with an environment variable

I have a C# console program that prints an App.config value. Can I override this value from an environment variable?

Example App.config:

  <appSettings>
    <add key="TestKey" value="Foo"/>
  </appSettings>

Example Code:

  Console.WriteLine($"Key: {ConfigurationManager.AppSettings["TestKey"]}");

I tried just setting the Key name but that obviously doesn't work:

C:\> set TestKey=Bar
C:\> ConsoleApp2.exe
Key: Foo


Solution 1:[1]

The ConfigurationManager class doesn't do that for you, it will only read from your app config. To fix this, you can use a function to get the variable and use that instead of calling ConfigurationManager.AppSettings directly. This is good practice to do anyway as it means you can easily move your config into a JSON file or a database and you won't need to update every usage of the old method.

For example:

public string GetSetting(string key)
{
    var value = Environment.GetEnvironmentVariable(key);

    if(string.IsNullOrEmpty(value))
    {
        value = ConfigurationManager.AppSettings[key];
    }

    return value;
}

Solution 2:[2]

In .net 4.7.1 you can use ConfigurationBuilders to accomplish this.

See https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configurationbuilder?view=netframework-4.8

Solution 3:[3]

in netcore (aspnetcore) you can override settings in environments https://github.com/dotnet/AspNetCore.Docs/issues/11361#issuecomment-471680877

need use prefix ASPNETCORE_youvariable (ASPNETCORE - default value).

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Luke Girvin
Solution 2 René
Solution 3 ???? ?.