Переопределить значение App.config с помощью переменной среды - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть консольная программа на C #, которая печатает значение App.config.Могу ли я переопределить это значение из переменной среды?

В моем реальном случае использования это значение указывает порт для привязки, и мне нужно запустить несколько экземпляров программы на моем сервере Jenkins, поэтому каждый из них долженимеют другое значение, даже если они используют один и тот же файл конфигурации.

Пример App.config:

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

Пример кода:

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

Я попытался просто установитьИмя ключа, но это, очевидно, не работает:

c:\Workspace\ConsoleApp2\ConsoleApp2\bin\Debug>set TestKey=Bar
c:\Workspace\ConsoleApp2\ConsoleApp2\bin\Debug>ConsoleApp2.exe
Key: Foo

1 Ответ

0 голосов
/ 19 сентября 2018

Класс ConfigurationManager не делает этого за вас, он будет читать только из вашего приложения.Чтобы это исправить, вы можете использовать функцию для получения переменной и использовать ее вместо непосредственного вызова ConfigurationManager.AppSettings.В любом случае это хорошая практика, так как вы можете легко перенести свою конфигурацию в файл JSON или базу данных, и вам не нужно обновлять каждое использование старого метода.

Например:

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

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

    return value;
}
...