Как перезапустить файл app / повторно прочитать файл app.config после изменения (.NET)?

Все мы знаем, что изменение файла web.config веб-приложения .NET перезапускает приложение и заставляет его читать обновленную конфигурацию. Как это сделать с помощью консоли или приложения WinForms? Спасибо :)


person cruizer    schedule 22.01.2009    source источник


Ответы (7)


Вероятно, потребуется FileSystemWatcher для отслеживания файла и обработки соответствующего события. Класс System.Configuration.ConfigManager может иметь соответствующие методы для перезагрузки (вызов метода или что-то подобное). Передо мной нет VS, но я бы сказал, что там наверняка есть какие-то крючки.

person DarkwingDuck    schedule 22.01.2009
comment
Если вы пойдете по маршруту FileSystemWatcher, позаботьтесь о действиях, которые вызывают несколько событий (не уверен, что это все еще проблема в более поздних версиях, но это определенно все еще было проблемой для .NET 2.0) - person ZombieSheep; 27.01.2009
comment
это класс System.Configuration.ConfigurationManager со статическим методом RefreshSection () - person cruizer; 28.01.2009

Используйте FileSystemWatcher, чтобы получать уведомления об изменении файла конфигурации.

Используйте ConfigurationManager.RefreshSection, чтобы обновить его с диска. без перезапуска приложения.

person Juliet    schedule 27.01.2009


Создайте FileSystemWatcher и прослушайте изменения в конфигурации. файл.
При срабатывании используйте следующий код:

MyGeneratedSettingsFile.Default.Reload();
person Patrik Svensson    schedule 27.01.2009

log4net имеет возможность обнаруживать внешние изменения в файле * .config. И, как уже говорили все, это делается с помощью FileSystemWatcher, который настроен на прослушивание изменений в вашем файле * .config.

Нижняя линия; FileSystemWatcher - это то, что вам нужно.

person Jesper Palm    schedule 27.01.2009

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

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

Однако что, если пользователь изменит это позже и вместо этого укажет базу данных Oracle? Недостаточно просто перезагрузить файл конфигурации, вы должны иметь возможность сообщить остальной части приложения, что что-то также изменилось.

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

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

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

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

person Lasse V. Karlsen    schedule 27.01.2009

Если вы используете .NET Framework 2 и используете настройки области пользователя, это довольно прозрачно. После изменения настроек просто вызовите метод Save (), и новые настройки сразу станут доступны.

Например

My.Settings.UpdateInterval = 10
My.Settings.Save()

Если параметр является областью приложения, тогда FileSystemWatcher может быть подходящим вариантом.

person Rad    schedule 27.01.2009