В моем app.config есть стандартные блоки протоколирования, NHibernate и т. Д., И я хотел бы извлечь их в общий XML-файл, который можно включить в качестве ссылки во все app.config файлы моих приложений.
Это возможно?
В моем app.config есть стандартные блоки протоколирования, NHibernate и т. Д., И я хотел бы извлечь их в общий XML-файл, который можно включить в качестве ссылки во все app.config файлы моих приложений.
Это возможно?
Да, вы можете использовать атрибут configSource блока конфигурации. Этот атрибут есть у всех блоков конфигурации, хотя он не задокументирован.
См. эту статью, полностью внизу, приложение B. Я также вставил соответствующий раздел ниже:
Приложение Б: включая внешние файлы конфигурации
Несмотря на все великолепие возможностей конфигурации .NET 2.0, есть один недостаток. При работе над одним проектом в нескольких средах управление конфигурацией может стать кошмаром. Процесс управления несколькими версиями файла конфигурации для нескольких сред - т. Е. Разработка, тестирование, постановка и производство - в моей текущей работе включает в себя ручное сравнение
.configфайлов всякий раз, когда изменения развертываются в той или иной среде, с ручным процессом слияния . Я потратил месяцы, пытаясь найти лучший способ, и в конце концов нашел его. Введите одну из тех ох-так любимых «недокументированных» - или, в данном случае, просто плохо документированных - функций, которыми так славится Microsoft:configSource. Я наткнулся на эту жемчужину только тогда, когда копался в исходном коде конфигурации .NET 2.0 с помощью Reflector, замечательного маленького инструмента.Каждому разделу конфигурации, когда он анализируется и загружается классами конфигурации .NET, назначается объект
SectionInformation. ОбъектSectionInformationсодержит метаинформацию о разделе конфигурации и позволяет управлять тем, как разделы переопределяют друг друга, если они определены в дочернем файле конфигурации (ASP.NET). На данный момент мы проигнорируем большую часть того, что может предложить SectionInformation, за исключением свойстваConfigSource. Добавляя атрибутconfigSourceк корневому элементу любогоConfigurationSection, вы можете указать альтернативный внешний источник, из которого будут загружены параметры конфигурации.<!-- SomeProgram.exe.config --> <configuration> <connectionStrings configSource="externalConfig/connectionStrings.config"/> </configuration> <!-- externalConfig/connectionStrings.config --> <connectionStrings> <add name="conn" connectionString="blahblah" /> </connectionStrings>В приведенном выше файле конфигурации раздел
<connectionStrings>был получен из файла с именемexternalConfig/connectionStrings.config. Все строки подключения приложения будут загружены из указанного файла. Теперь, когда строки подключения загружены из внешнего ресурса, относительно просто создатьconnectionStrings.configфайл в каждой среде в одном и том же относительном местоположении. Следовательно,externalConfig/часть путиconnectionStrings.config. Прелесть здесь в том, что мы можем правильно определить строки подключения для каждой среды один раз. Нам не нужно беспокоиться о случайном переопределении этих параметров во время развертывания, когда файл конфигурации был либо неправильно объединен, либо не объединен вообще. Это может быть огромным благом при развертывании изменений в приложении в производственной среде, где критически важно наличие правильных строк подключения к базе данных. Недостатком использования атрибутаconfigSourceявляется то, что он требует, чтобы все параметры конфигурации были помещены во внешний файл. Невозможно наследование или переопределение, что в некоторых случаях делает их бесполезными. Все внешние файлы конфигурации, используемые с атрибутомconfigSource, также должны находиться в относительном дочернем пути к основному.configфайлу. Я считаю, что это связано с проблемами безопасности при хранении файла по относительному родительскому пути в веб-среде.Еще следует отметить, что в разделе
<appSettings>есть лучшая альтернатива использованиюconfigSource, называемая файлом. Если вы используете атрибут файла, а не configSource с разделом<appSettings>, вы можете определить настройки как в корневом.configфайле, так и в указанном файле. Настройки из корневого.configфайла также могут быть переопределены в указанном файле, просто добавив что-то с тем же ключом. К сожалению, атрибут файла доступен только в разделе<appSettings>и не встроен в структуру конфигурации. Можно реализовать аналогичный атрибут в собственных разделах конфигурации. Это будет обсуждаться в следующей части дополнительных тем по настройке, после нескольких предварительных статей;).
you can use the configSection attribute - Я так понимаю, вы имеете в виду configSource?
- person Geoff; 26.08.2016