Как создать пользовательский раздел конфигурации в app.config

Я хочу добавить пользовательский раздел конфигурации в файл app.config следующим образом.

<Companies>
  <Company  name="" code=""/>
  <Company  name="" code=""/>
</Companies>

<Employees>
  <Employee name="" Des="" addr="" sal=""/>
  <Employee name="" Des="" addr="" sal=""/>
</Employeess>

<Departments>
  <Department Id="" Projects=""/>
</Departments>

<Projects>
  <Project Path=""/>
</Projects>

В разделе «Отдел» имеется в виду раздел «Проекты».

Может ли кто-нибудь сказать мне, как это сделать? И как получить к нему доступ в моем коде?

@Bhaskar: Пожалуйста, найдите код для вашего комментария.

 public class RegisterCompaniesConfig : ConfigurationSection
    {
        public static RegisterCompaniesConfig GetConfig()
        {
            return (RegisterCompaniesConfig)System.Configuration.ConfigurationManager.GetSection("RegisterCompanies")?? new RegisterCompaniesConfig();
        } 
        [System.Configuration.ConfigurationProperty("Companies")]       
        public Companies Companies
        {
            get
            {
                object o = this["Companies"]; return o as Companies;
            }
        }
    } 

public class Companies : ConfigurationElementCollection
    {
        public Company this[int index] 
        { get { return base.BaseGet(index) as Company; } 
            set
            {
                if (base.BaseGet(index) != null)
                {
                    base.BaseRemoveAt(index);
                } 
                this.BaseAdd(index, value);
            } 
        } 

        protected override System.Configuration.ConfigurationElement CreateNewElement() 
        { return new Company(); 
        } 

        protected override object GetElementKey(System.Configuration.ConfigurationElement element)
        { return ((Company)element).Name; }
    } 



public class Company : ConfigurationElement
    {
        [ConfigurationProperty("name", IsRequired = true)]   
        public string Name { get { return this["name"] as string; } }

        [ConfigurationProperty("code", IsRequired = true)]        
        public string Code { get { return this["code"] as string; } }
    } 

person Geeta    schedule 20.09.2011    source источник
comment
Подумайте о том, чтобы поместить эти параметры в отдельный XML-файл, а не в app.config.   -  person Sjoerd    schedule 20.09.2011
comment
@Sjoerd, чего можно добиться, поместив их в отдельные файлы конфигурации? Все записи должны быть в одном файле, поскольку они связаны между собой.   -  person Bhaskar    schedule 20.09.2011
comment
@Geeta, в вашем коде выше я вижу это - ConfigurationManager.GetSection("RegisterCompanies") - где раздел RegisterCompanies объявлен в вашем файле конфигурации? Я вижу только <section name="Companies" на основе того, что вы разместили ранее.   -  person Bhaskar    schedule 21.09.2011


Ответы (3)


Вам следует ознакомиться с серией из трех частей Джона Ристы о настройке .NET 2.0 на CodeProject.

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

person marc_s    schedule 20.09.2011

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

person Nicola Musatti    schedule 20.09.2011
comment
я просмотрел ваш код. Но вы определили свой собственный класс для обработки коллекции, такой как ConfigElementCollectionBase. Однако я хочу сделать это, используя элемент коллекции конфигурации. Если вы знаете, можете ли вы сказать мне, как написать код для вышеуказанного раздела, используя ConfigurationElementCollection . - person Geeta; 21.09.2011

Это поможет вам http://msdn.microsoft.com/en-us/library/2tw134k3(v=vs.80).aspx

person Bhaskar    schedule 20.09.2011
comment
Я только что попробовал один простой пример, который упоминается на одном веб-сайте. Всякий раз, когда я делаю ConfigurationManager.GetSection(Companies), он возвращает значение null. Может ли кто-нибудь сказать мне, в чем именно проблема. - person Geeta; 21.09.2011
comment
@Geeta, тебе нужно показать мне свой конфигурационный файл, чтобы я указал точную проблему. - person Bhaskar; 21.09.2011
comment
Найдите содержимое файла конфигурации ‹?xml version=1.0 encoding=utf-8 ?› ‹configuration› ‹configSections› ‹section name=Companies type=CustomConfigSectionTester.RegisterCompaniesConfig,CustomConfigSectionTester/› ‹/configSections› ‹Companies› ‹Company name= Код Tata Motors=Tata/› ‹Название компании=Honda Motors code=Honda/› ‹/Companies› ‹/configuration› - person Geeta; 21.09.2011
comment
Вы определили свой тип обработчика CustomConfigSectionTester.RegisterCompaniesConfig,CustomConfigSectionTester? Если это не определено, соответствующий раздел может быть не загружен. - person Bhaskar; 21.09.2011
comment
да, я добавил класс RegisterCompaniesConfig, производный от ConfigSection. Я также реализовал ConfigurationElementCollection и ConfigurationElement. - person Geeta; 21.09.2011
comment
Вы уверены, что это ConfigSection, из которого вы произошли? Это кажется неверным, если я правильно помню - должно быть ConfigurationSection, я полагаю. Без кода будет трудно догадаться, но очевидно, что ваш ConfigurationManager не может найти сцецию по названию Компании. - person Bhaskar; 21.09.2011