Есть ли способ во время выполнения переключить приложение app.config (current.config на new.config, файл за файлом). У меня есть процесс резервного копирования / восстановления, который должен заменить собственный файл application.exe.config. Я видел этот Почта, но он не отвечает, как это сделать во время выполнения.





Можете ли вы перезапустить приложение, когда обнаружите, что вам нужно переключить файлы? Если да, то просто нужно переключить файлы и перезапустить. Теперь хитрость в том, что если .NET сохраняет файл app.config открытым во время работы программы. Я подозреваю, что это не так, но если наиболее очевидный подход не работает, я предлагаю вам иметь второе приложение (cfgswitcher.exe), которое ожидает завершения процесса с PID, указанным в командной строке, затем переключает файлы конфигурации и перезапускает оригинальный процесс. Затем вашему приложению просто нужно будет запустить cfgswitcher.exe (передав свой собственный PID в качестве аргумента командной строки) и завершить работу.
Как я уже сказал, сначала стоит попробовать более очевидный подход.
Обновлено: если вы не можете перезапустить приложение (или даже его часть в новом домене приложения), то различные аспекты app.config (привязки сборки и т. д.) Не могут быть изменены. Если вас интересует только изменение разделов конфигурации собственный, я предлагаю вам сохранить их в отдельном файле конфигурации и перезагружать их, когда захотите.
Посмотрите на события, доступные вам в классе ApplicationSettingsBase. Есть PropertyChanged и SettingChanging, которые могут дать вам то, что вам нужно.
Вы также можете посмотреть файл и, если он изменился, вызвать метод перезагрузки, чтобы получить новые настройки.
Я не думаю, что вообще возможно переключать конфигурацию во время выполнения без перезапуска, поэтому, если вы не можете применить подход Джона, вам следует попробовать придумать другой подход.
В любом случае, может быть, просто у меня недостаточно информации о вашем сценарии, но это кажется подозрительным.
Уверены ли вы, что замена файла конфигурации - лучший способ выполнить любое требование, которое вам нужно выполнить? Я имею ввиду, это довольно необычная вещь. На вашем месте я бы попытался придумать другой подход.
Оказывается, я могу поменять файл .config на новый и сделать ConfigurationManager.RefreshSection (...) для каждого раздела. Он будет обновлен из нового файла .config.
app.config от Microsoft .NET не предназначен для вашего сценария, как и для многих других. Я часто сталкиваюсь с подобной потребностью, поэтому потратил много усилий на разработку решения.
Измените дизайн, чтобы использовать app.config только в качестве начальной загрузки конфигурации: укажите, где найти остальные реальные данные конфигурации. Эта информация почти никогда не должна изменяться, поэтому нет необходимости обрабатывать просмотр файлов или перезапуск приложения.
Выберите альтернативное расположение для реальных данных конфигурации: файл, база данных, возможно, даже веб-сервис. Я предпочитаю базу данных в большинстве случаев, поэтому я создаю таблицу конфигурации с простой структурой, которая позволяет мне хранить мои данные.
Реализуйте простую библиотеку, чтобы обернуть доступ к конфигурации, чтобы у вас был простой API для остальной части вашего приложения (через внедрение зависимостей). Скройте использование app.config, а также ваше реальное место хранения конфигурации. Поскольку .NET строго типизирован, настройте параметры конфигурации так - преобразуйте каждую извлеченную строку в наиболее конкретный доступный тип (URL, Int32, FileInfo и т. д.).
Определите, какие параметры конфигурации можно безопасно изменить во время выполнения, а какие нет. Как правило, одни настройки необходимо менять вместе с другими, или просто нет смысла разрешать их изменение вообще. Если все ваши данные конфигурации можно безопасно изменить во время выполнения, тогда это упрощает задачу, но я ОЧЕНЬ сомневаюсь в таком сценарии. По возможности скрывайте возможность изменения и взаимозависимости параметров конфигурации.
Разработайте ответ на недоступность ваших реальных данных конфигурации. Я предпочитаю рассматривать отсутствие каких-либо параметров конфигурации как фатальную ошибку, которая прерывает работу приложения, если я не могу определить пригодное для использования значение по умолчанию. Точно так же я прерываю работу при отсутствии контейнера хранения конфигурации (файла, таблицы базы данных и т. д.).
Наслаждайтесь и наилучшие пожелания.
Я не могу перезапустить приложение.