2009-02-26 3 views

ответ

28

Yes, you do:

.Net Framework прочтет app.config один раз, и никогда не прикасайтесь к app.config снова. Вот почему вы должны перезапустить приложение, чтобы получить изменения.

Почему инфраструктура .Net не обнаружила, что app.config изменился, и обновить все данные конфигурации?

Причина проста, это невозможно вообще.

Давайте использовать Раймонда «представьте себе, это может быть сделано» логика здесь ...

4

Да.

Предположительно вы имеете в виду файл appname.exe.config?

8

Нет, у вас нет есть to. Но если вы хотите, чтобы изменения в app.config вступили в силу, возможно, потребуется перезапустить его. Или вы можете захотеть реализовать механизм мониторинга пользовательских конфигурационных файлов, который изменит настройки служб «на лету».

+7

«если вы хотите, чтобы изменения в app.config вступили в силу», - я думаю, что это подразумевается в вопрос! –

+0

Отлично, когда я из резиновых цыплят. –

+0

@ Gamecat: свободный диапазон? –

1

Это выходит за рамки вопроса, но я бы предположил, что вы хотите внести изменения только в некоторые разделы, специфичные для приложения (appSettings и т. Д.).

Вам лучше написать свой собственный обработчик раздела конфигурации, который контролирует собственный файл конфигурации - подход nlog uses. Проверьте раздел «Автоматическая реконфигурация».

2

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

Например, система ведения журнала Log4Net предлагает такой механизм для своего файла конфигурации.

7

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

ConfigurationManager.RefreshSection("appSettings") 
    sValue = ConfigurationManager.AppSettings(name) 
+0

Это отличная находка! – d219