Пользовательский раздел конфигурации в App.config C#


Я довольно новичок с разделами конфигурации в C#
Я хочу создать пользовательский раздел в конфигурационном файле. Что я пробовал после поиска в Google, так это
Конфиг файл:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="MyCustomSections">
      <section name="CustomSection" type="CustomSectionTest.CustomSection,CustomSection"/>
    </sectionGroup>
  </configSections>

  <MyCustomSections>
    <CustomSection key="Default"/>
  </MyCustomSections>
</configuration>


CustomSection.cs

    namespace CustomSectionTest
{
    public class CustomSection : ConfigurationSection
    {
        [ConfigurationProperty("key", DefaultValue="Default", IsRequired = true)]
        [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
        public String Key
        {
            get { return this["key"].ToString(); }
            set { this["key"] = value; }
        }
    }
}


Когда я использую этот код для получения раздела, я получаю сообщение об ошибке конфигурации.

var cf = (CustomSection)System.Configuration.ConfigurationManager.GetSection("CustomSection");


Что мне не хватает?
Благодарю.

редактировать
В конечном итоге мне нужно

    <CustomConfigSettings>
    <Setting id="1">
        <add key="Name" value="N"/>
        <add key="Type" value="D"/>
    </Setting>
    <Setting id="2">
        <add key="Name" value="O"/>
        <add key="Type" value="E"/>
    </Setting>
    <Setting id="3">
        <add key="Name" value="P"/>
        <add key="Type" value="F"/>
    </Setting>
</CustomConfigSettings>

3 ответа

Решение

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="customAppSettingsGroup">
      <section name="customAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </sectionGroup>
  </configSections>
  <customAppSettingsGroup>
    <customAppSettings>
      <add key="KeyOne" value="ValueOne"/>
      <add key="KeyTwo" value="ValueTwo"/>
    </customAppSettings>
  </customAppSettingsGroup>
</configuration>

Использование:

NameValueCollection settings =  
   ConfigurationManager.GetSection("customAppSettingsGroup/customAppSettings")
   as System.Collections.Specialized.NameValueCollection;

if (settings != null)
{
 foreach (string key in settings.AllKeys)
 {
  Response.Write(key + ": " + settings[key] + "<br />");
 }
}

Попробуйте использовать:

var cf = (CustomSection)System.Configuration.ConfigurationManager.GetSection("MyCustomSections/CustomSection");

Вам нужно как имя группы разделов, так и пользовательский раздел.

Выделите ConfigurationSection и нажмите клавишу F1. Вы увидите, что реализация на веб-сайте MSDN переопределяет свойство "Свойства", которое возвращает "ConfigurationPropertyCollection", поскольку у ваших свойств есть соответствующий атрибут такого типа, что вы должны иметь возможность заполнить эту коллекцию своими свойствами. если не обернуть их так же, как парни из MS.

Другие вопросы по тегам