Мой вопрос касается работы со стандартными объектами конфигурации .NET и настраиваемыми элементами конфигурации (что можно определить, расширив класс System.Configuration.ConfigurationSection
). Обычно мы получаем их из методов System.Configuration.ConfigurationManager
, GetSection(...)
.
Загруженный объект конфигурации представляет собой объединенный объект конфигурации, содержащий настройку, присутствующую в файле конфигурации приложения (файл app.config или web.config, который разработчик) и то, что определено в файле machine.config (последний поставляется с установкой .NET Framework).
Итак, мы можем предположить, что конфигурация загружается иерархически с помощью machine.config, и любая пользовательская конфигурация, накладывающаяся на эту настройку по умолчанию, может выглядеть следующим образом:
- machine.config
- app.config (переопределяет/объединяет с соответствующими элементами, найденными в machine.config)
Моя цель - создать несколько уровней конфигурации, чтобы между (и, если возможно, после) могли быть другие файлы конфигурации между machine.config и app.config файл:
- machine.config
- custom.config (настраиваемая конфигурация, мешающая файлу machine.config и файлу app.config)
- app.config - теперь app.config объединяется с машинным .config и custom.config
- custom.config (настраиваемая конфигурация, мешающая файлу machine.config и файлу app.config)
Обновить
Точка с этим - если я определил раздел конфигурации как custom.config, так и app.config, мне нужно получить объединенную версию обеих конфигураций когда я звоню ConfigurationManager.GetSection("MyCustomSection")
. В идеале, будет здорово, если я смогу выполнить слияние, как описано в этой статье MSDN.
Обычно я пишу свой собственный класс диспетчера конфигурации и стараюсь как можно дойти до желаемого результата, но предполагая, что платформа .NET работает в machine.config и app.config, я подумал, что я мог бы использовать встроенные функции фреймворка. Кроме того, я не знаю, как вручную запускать такое слияние, если я действительно должен прибегать к реализации моего конфигурационного менеджера.
Итак, можно ли использовать встроенные механизмы раздела конфигурации/элемента, слияния с настраиваемыми файлами конфигурации? Я особенно заинтересован в разработке и поддержке этого для пользовательских разделов конфигурации. Пространство имен System.Configuration
содержит базовые объекты для создания раздела конфигурации и элементов, и это позволяет некоторые параметры, связанные с объединением (например, установка соответствующего ConfigurationElementCollectionType
). Связаны ли они только слиянием с machine.config (или несколькими слоями файлов web.config в веб-приложении), или же можно вручную инициировать слияние pre загруженные файлы конфигурации? Я стараюсь избегать поддержки пользовательского слияния в любом из моих настраиваемых объектов конфигурации и, возможно, забыть о поддержке существующих настроек из System.Configuration...
Обновление
Есть важное разъяснение, которое я хотел бы сделать в ответ на существующие ответы и комментарии. Я могу загрузить объекты ConfigurationSection
из текущей настройки приложения (app.config/ web.config) и из физического файла, который является моим обычным .config. Мне нужно знать, есть ли возможность объединить эти объекты, не прибегая к анализу и сопоставлению свойств по свойствам, некоторыми встроенными средствами в рамках.
Примечание.. Я был бы признателен за лучшее решение, которое будет работать на .NET 3.0+. Добавьте примечание, если ваш ответ нацелен на более высокую версию фреймворка.