I have a C# console program that prints an App.config value. Can I override this value from an environment variable?
In my real use-case, the value specifies a port to bind, and I need to run multiple instances of the program in my Jenkins server, so each one should have a different value even though they use the same config file.
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:\Workspace\ConsoleApp2\ConsoleApp2\bin\Debug>set TestKey=Bar
c:\Workspace\ConsoleApp2\ConsoleApp2\bin\Debug>ConsoleApp2.exe
Key: Foo
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
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;
}
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With