Совместное использование настроек приложения в нескольких проектах

У нас есть довольно большое решение .NET с несколькими исполняемыми проектами (программы winforms и командной строки). В настоящее время каждый из этих проектов имеет собственный app.config, содержащий строки подключения, настройки почтового сервера и тому подобное. Как вы можете себе представить, не так уж и удобно вносить изменения в каждый файл app.config всякий раз, когда необходимо обновить конкретный параметр.

Что, по вашему мнению, является лучшей практикой для централизованного управления этими настройками? До сих пор я думал о двух разных подходах. Первый использует пользовательский класс (или классы), который содержит настройки и сериализуется в XML и десериализуется из него. Второй подход заключается в определении файла app.config только для одного проекта и использовании ConfigurationManager.OpenExeConfiguration() для доступа к нему.


person Community    schedule 30.09.2008    source источник


Ответы (3)


Создайте App.config в стартовом проекте и статически свяжите его в других проектах.

Вы можете связать статически, выбрав «Добавить» -> «Существующий элемент», и при нажатии кнопки «Добавить» в окне «Просмотр файлов» на кнопке «Добавить» появляется небольшая стрелка вниз. Нажмите там, и появится опция «Добавить как ссылку». Это поместит один и тот же App.Config в оба проекта только с одним фактическим файлом.

Если ваши проекты имеют разные App.Config с одинаковыми только «некоторыми» настройками, рассмотрите возможность проверки параметра файла; Я имею в виду, что в проекте может быть более одного App.Config: http://weblogs.asp.net/pwilson/archive/2003/04/09/5261.aspx

Просто создайте центральный файл common.config и укажите на него.

person Leahn Novash    schedule 30.09.2008
comment
Хотя это может работать, когда я разрабатываю и отлаживаю решение, я боюсь, что это не сработает, когда решение развернуто и пользователю нужно изменить настройки. - person ; 30.09.2008

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

person technophile    schedule 30.09.2008

Лично я бы посоветовал не вводить ненужную зависимость от файла .config из другой сборки. Использование пользовательского класса с сериализацией звучит чище в этом сценарии, но вы подвергаете себя потенциальным проблемам с версиями и теряете потенциальные преимущества, предлагаемые app.config (обработчики разделов и т. д.).

person Community    schedule 30.09.2008