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

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

Ответы [ 7 ]

6 голосов
/ 22 января 2009

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

5 голосов
/ 27 января 2009

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

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

2 голосов
/ 27 января 2009

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

MyGeneratedSettingsFile.Default.Reload();
2 голосов
/ 27 января 2009

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

1 голос
/ 27 января 2009

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

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

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

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

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

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

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

1 голос
/ 27 января 2009

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

Итог; FileSystemWatcher - это путь.

0 голосов
/ 27 января 2009

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

Например

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...