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

StackOverflow https://stackoverflow.com/questions/468603

  •  19-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вероятно, нужен 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 может быть подходящим вариантом

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top