Все мы знаем, что изменение файла web.config веб-приложения .NET перезапускает приложение и заставляет его читать обновленную конфигурацию. Как это сделать с помощью консоли или приложения WinForms? Спасибо :)
Как перезапустить файл app / повторно прочитать файл app.config после изменения (.NET)?
Ответы (7)
Вероятно, потребуется FileSystemWatcher для отслеживания файла и обработки соответствующего события. Класс System.Configuration.ConfigManager может иметь соответствующие методы для перезагрузки (вызов метода или что-то подобное). Передо мной нет VS, но я бы сказал, что там наверняка есть какие-то крючки.
Используйте FileSystemWatcher, чтобы получать уведомления об изменении файла конфигурации.
Используйте ConfigurationManager.RefreshSection, чтобы обновить его с диска. без перезапуска приложения.
Здесь есть хороший раздел, посвященный перезагрузке данных здесь < / а>. Объедините это с FileSystemWatcher, как предлагает DarkwingDuck, и вы вполне можете оказаться в выигрыше.
Создайте FileSystemWatcher и прослушайте изменения в конфигурации. файл.
При срабатывании используйте следующий код:
MyGeneratedSettingsFile.Default.Reload();
log4net имеет возможность обнаруживать внешние изменения в файле * .config. И, как уже говорили все, это делается с помощью FileSystemWatcher, который настроен на прослушивание изменений в вашем файле * .config.
Нижняя линия; FileSystemWatcher - это то, что вам нужно.
Однако простая перезагрузка файла конфигурации подразумевает более широкий смысл, и именно так остальная часть приложения должна на это реагировать.
Например, вы можете настроить слои контекста своей базы данных для SQL Server после того, как вы прочитали конфигурацию, которую вы собираетесь разговаривать с SQL Server, и получили для нее строку подключения.
Однако что, если пользователь изменит это позже и вместо этого укажет базу данных Oracle? Недостаточно просто перезагрузить файл конфигурации, вы должны иметь возможность сообщить остальной части приложения, что что-то также изменилось.
Я бы сказал, что вам следует абстрагироваться от части конфигурации внутри нового класса, в котором есть события. Как только вы решите перезагрузить конфигурацию, этот класс должен внутренне выяснить, какие параметры были изменены, и запустить соответствующие события.
Если вы используете контейнер IoC, вам может потребоваться повторно подключить некоторые его зависимости из-за новых настроек.
Таким образом, фрагменты вашего приложения, которые зависят от конфигурации и могут по какой-либо причине локально кэшировать параметры конфигурации для заданного временного интервала, должны будут подключаться к соответствующим событиям и реагировать на них срабатыванием.
Что касается фактического обнаружения и перезагрузки самого файла конфигурации, другие ответы, похоже, охватили это действительно хорошо, поэтому я не собираюсь повторять это здесь.
Если вы используете .NET Framework 2 и используете настройки области пользователя, это довольно прозрачно. После изменения настроек просто вызовите метод Save (), и новые настройки сразу станут доступны.
Например
My.Settings.UpdateInterval = 10
My.Settings.Save()
Если параметр является областью приложения, тогда FileSystemWatcher может быть подходящим вариантом.