Почему мои изменения AppSettings в App.config не учитываются во время выполнения? (Консольное приложение)

У меня есть консольное приложение с собственным App.config.

Мне нужно время от времени изменять некоторые значения в разделе.

Моя проблема заключается в том, что когда я выполняю exe в папке bin/debug, он правильно отвечает соответствующим настройкам. Но когда я редактирую и изменяю значения некоторых пар ключ/значение и RE-RUN exe, он по-прежнему считывает исходные значения.

(По RE-RUN я имею в виду запуск приложения в команде promt, вызывая MyTool.exe)

Я попытался позвонить

ConfigurationManager.RefreshSection("appSettings");

в начале моего метода Main. Но не помогло.

Не могли бы вы посоветовать? Благодаря

Ответ 1

Но когда я редактирую и изменяю значения некоторых пар ключ/значение и RE-RUN exe, он по-прежнему считывает исходные значения.

Зависит от того, как вы RE-RUNNing этого exe. Если вы делаете это в Visual Studio, нажав F5, VS просто копирует файл app.config в ваш проект на выходе и переименовывает его в AppName.exe.config. Поэтому, если вы хотите, чтобы ваши изменения были приняты во внимание, вам необходимо изменить AppName.exe.config (not App.config), а затем запустить исполняемый файл из проводника Windows.

При этом приложение App.config считывается и анализируется только один раз. Когда приложение запускается. Значения затем кэшируются, чтобы избежать дорогостоящего синтаксического анализа XML каждый раз, когда ваше приложение запрашивает некоторое значение.

App.config предназначен для хранения значений конфигурации, которые не должны быть изменены. Если вам нужно динамически изменять значения конфигурации, вы должны использовать другой механизм хранения: файл, базу данных,...

Но метод ConfigurationManager.RefreshSection("appSettings"); должен работать. После того как вы изменили файл AppName.exe.config, вы вызываете этот метод, а затем возвращаете требуемое значение с помощью ConfigurationManager.AppSettings["someKey"];, который должен вернуть вам новое значение.

Ответ 2

  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// change ConnectionString in App.Config for Entity FrameWork Object....
 //..... 
config.Save();

Вы сохраняете файл конфигурации?