Изменить app.config во время выполнения - PullRequest
1 голос
/ 09 октября 2009

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

В настоящее время я копирую файл конфигурации, который я хотел бы использовать, в myapp.exe.config и обновляю все разделы. Проблема, с которой я сталкиваюсь, заключается в том, что log4net, похоже, все портит, но только в сборке релиза (поскольку статические поля инициализируются в разное время).

Я явно НЕ хочу во время сборки решать, какой конфиг использовать.

Есть идеи (возможно, есть лучший подход)?

ТИА Martin

Ответы [ 3 ]

1 голос
/ 09 октября 2009

Вы можете настроить log4net после того, как решите, какой конфигурационный файл использовать, и скопировали его на место, используя XmlConfigurator.Configure (новый System.IO.FileInfo ("Filename.config")))

0 голосов
/ 09 октября 2009

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

0 голосов
/ 09 октября 2009

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

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

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

...