Лучший способ обработать несколько экземпляров файла конфигурации?

Мы выполняем сложную систему, записанную в C#.NET 3.5, состоя из 20 + веб-сайты, 10 + сервисы окон и различные запланированные задачи и вспомогательные приложения.

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

Мы не регистрируем наш DLL в GAC по различным причинам: 1) Нам нравится гибкость быстрого развертывания изменений в выборочных проектах, не восстанавливая целую систему или вызывая ненужное время простоя. 2) Некоторые экземпляры DLL требуют немного отличающихся конфигураций; например, некоторые проекты используют различные строки подключения, адреса электронной почты уведомления и так далее.

Мы экспериментировали с атрибутами AppSettings file/configSource в Web.config/App.config, но они только работают с относительными путями, не через проекты. Мы рассмотрели сохранение значений по умолчанию в machine.config, но это - миссия, будучи слишком нарушен и полный важного материала, не связанного с нашими проектами.

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

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

Существует ли предложенный, промышленный стандарт способ решить эту проблему в.NET?

9
задан realworldcoder 8 January 2010 в 01:40
поделиться

3 ответа

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

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

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

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

Не загрязняйте реестр.

2
ответ дан 5 December 2019 в 02:07
поделиться

, я бы использовал OpenExeConfiguration (http://msdn.microsoft.com/en-us/library/ms224437.aspx) и имел бы каждый open 2 конфигурационных файла app/dll, первый - по умолчанию, второй - по переопределению.

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

0
ответ дан 5 December 2019 в 02:07
поделиться

Как вы развертывали эти веб-сайты и приложения, работали ли эти модули в вашей системе в на той же машине, и вызывали ли эти модули библиотеки DLL из определенного каталога?

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

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

0
ответ дан 5 December 2019 в 02:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: