Мой вопрос касается работы со стандартными объектами конфигурации .NET и настраиваемыми элементами конфигурации (которые можно определить, расширив _ 1_ класс). Обычно мы получаем их из класса System.Configuration.ConfigurationManager
методы, пример которых GetSection(...)
.
Загруженный объект конфигурации выглядит как объединенный объект конфигурации, содержащий настройки, присутствующие в файле конфигурации приложения (app.config или web.config strong > файл, который, возможно, создал разработчик), и то, что определено в файле machine.config (последний идет с установкой .NET Framework).
Итак, мы можем предположить, что конфигурация загружается иерархически, сначала с помощью machine.config и любой пользовательской конфигурации, накладывающейся на эту настройку по умолчанию, и на нее можно смотреть так:
- machine.config
- app.config (overrides / merges with respective elements found in machine.config )
Моя цель - создать несколько уровней конфигурации, чтобы между (и, если возможно, после) файла machine.config и app.config могли быть другие файлы конфигурации. :
- machine.config
- custom.config (a custom config interfering between the machine.config and the app.config file)
- app.config - now app.config is merged with both machine.config and custom.config
- custom.config (a custom config interfering between the machine.config and the app.config file)
Обновить
Дело в том, что если я определил раздел конфигурации как в custom.config, так и в app.config, мне нужно получить объединенную версию обеих конфигураций, когда я вызываю ConfigurationManager.GetSection("MyCustomSection")
. В идеале было бы здорово, если бы я смог выполнить слияние, как описано в этом MSDN статья.
Обычно я пишу свой собственный класс диспетчера конфигурации и стараюсь продвинуться как можно дальше, чтобы получить желаемый результат, но при условии, что в .NET framework это работает для machine.config и app.config, я подумал, что мне может пригодиться встроенная функциональность фреймворка. Кроме того, я не знаю, как вручную запустить такое слияние, если я действительно должен прибегать к собственной реализации диспетчера конфигураций.
Итак, можно ли использовать встроенные механизмы слияния раздела / элемента конфигурации с пользовательскими файлами конфигурации? Я особенно заинтересован в разработке и поддержке этого для пользовательских разделов конфигурации. Пространство имен System.Configuration
содержит базовые объекты для создания раздела и элементов конфигурации, которые позволяют выполнять некоторые настройки, связанные с объединением (например, установка соответствующего _ 6_, например). Связаны ли они только со слиянием с machine.config (или несколькими уровнями файлов web.config в веб-приложении), или можно вручную запустить слияние предварительно -загруженные файлы конфигурации? Я пытаюсь избежать поддержки пользовательского слияния в любом из моих настраиваемых объектов конфигурации и, вероятно, забываю о поддержке существующих настроек из System.Configuration ...
Обновить
Я хотел бы сделать важное уточнение в ответ на существующие ответы и комментарии. Я могу загрузить объекты ConfigurationSection
из текущей настройки приложения (app.config / web.config) и из физического файла, который является моим custom.config . Мне нужно знать, есть ли возможность объединить эти объекты, не прибегая к отражению и сравнению свойств по свойствам, с помощью некоторых встроенных средств в структуре.
Примечание. Я был бы признателен за лучшее решение, которое будет работать на .NET 3.0+. Добавьте примечание, если ваш ответ нацелен на более высокую версию платформы.
ConfigurationManager.GetSection(...)
. Надеюсь, это немного больше проясняет мои требования. - person Ivaylo Slavov   schedule 11.05.2015