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

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

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

Моя проблема в том, что когда я запускаю exe в папке bin / debug, он правильно получает соответствующие настройки приложения. Но когда я редактирую и изменяю значения некоторых пар ключ / значение и ПЕРЕЗАПУСКУ exe, он по-прежнему считывает исходные значения.

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

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

ConfigurationManager.RefreshSection("appSettings");

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

Вы могли бы посоветовать? Спасибо


person pencilCake    schedule 13.07.2012    source источник
comment
Вы редактируете app.config внутри IDE или редактируете непосредственно exe.config в папке BIN / DEBUG?   -  person Steve    schedule 13.07.2012
comment
В папке отладки. Не в IDE.   -  person pencilCake    schedule 13.07.2012
comment
И каково значение свойства Копировать в выходной каталог вашего app.config внутри IDE?   -  person Steve    schedule 13.07.2012
comment
Простое нажатие F5 после любых изменений в коде не поможет. Просто перестройте, а затем нажмите F5, чтобы новые значения в app.config обновились в файле * .config в папке bin\debug.   -  person user20358    schedule 03.12.2016


Ответы (2)


Но когда я редактирую и изменяю значения некоторых пар ключ / значение и ПОВТОРНО ЗАПУСКАЮ exe, он по-прежнему считывает исходные значения.

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

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

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

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

person Darin Dimitrov    schedule 13.07.2012
comment
Я согласен. Но что, если бы мне нужно было добиться того, о чем я просил. Является ли это возможным? (+1 за совет по передовой практике) - person pencilCake; 13.07.2012
comment
Под RE-RUN я подразумеваю запуск приложения в командной строке путем вызова MyTool.exe - person pencilCake; 13.07.2012
comment
Кто будет изменять этот файл во время работы приложения? Само приложение или какой-то другой внешний процесс? - person Darin Dimitrov; 13.07.2012
comment
Пользователи. Обычно 2-3 человека, на своих локальных машинах, если это необходимо. - person pencilCake; 13.07.2012
comment
В этом случае должен работать метод ConfigurationManager.RefreshSection("appSettings");. Но я не рекомендую идти по этому пути. - person Darin Dimitrov; 13.07.2012
comment
Ok. Нашел проблему, она моя плохая. В выходном каталоге есть App.Config и MyApp.exe.config. Вместо этого я изменял App.config. Спасибо, что упомянули об этом :) - person pencilCake; 13.07.2012
comment
Да, я упомянул об этом в своем ответе. - person Darin Dimitrov; 13.07.2012
comment
Также стоит упомянуть, что если вы работаете под отладчиком в Visual Studio, вам нужно будет обновить MyApp.vshost.exe.config в папке bin и открыть правильный путь сборки (например, Debug, Release и т. Д.). Отмечая это, потому что у меня был момент, когда я тупой. - person Davy8; 04.07.2014
comment
Если эта проблема возникла сегодня, убедитесь, что для параметра App.config Properties Copy To Output Directory установлено значение Do not copy, так вы не получите два файла конфигурации в каталоге bin. - person Creamstout10; 01.06.2016

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

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

person Владимир В    schedule 26.12.2015