2016-06-10 4 views
0

Я выполнил учебное пособие по Stackoverflow, чтобы добавить настраиваемый раздел конфигурации в конфигурационный файл exe, однако при его вызове он возвращает null. Он даже не попадает в статические конструкторы, поэтому что-то явно неправильно, но я не вижу, что.Не удается получить пользовательский раздел конфигурации для работы в app.config

Вот мой конфигурационный файл и раздел, который я хочу найти.

<configuration> 
    <appSettings> 
    </appSettings> 
     <configSections> 
      <section name="PresetFilters" type="ImageTool.PresetFiltersConfiguration, ImageTool" /> 
     </configSections> 
    <PresetFilters> 
    <add key="Default,-20,0,0,0,0" /> 
    <add key="No Change,0,0,0,0,0" /> 
    <add key="Dark Photo,10,10,0,0,-10" /> 
    </PresetFilters> 
</configuration> 

Я называю это так:

PresetFiltersConfiguration pf = (PresetFiltersConfiguration)ConfigurationManager.GetSection("PresetFilters"); 

и возвращает нуль, и даже не входит мой статику класса или класса. Вот код. Любая помощь будет оценена по достоинству. Благодарю.

public class PresetFiltersConfiguration : ConfigurationSection 
{ 
    private static ConfigurationPropertyCollection properties; 
    private static ConfigurationProperty propPresets; 

    static PresetFiltersConfiguration() 
    { 
     propPresets = new ConfigurationProperty(null, typeof(PresetFiltersElementCollection), 
                 null, 
                 ConfigurationPropertyOptions.IsDefaultCollection); 
     properties = new ConfigurationPropertyCollection { propPresets }; 
    } 

    protected override ConfigurationPropertyCollection Properties 
    { 
     get 
     { 
      return properties; 
     } 
    } 

    public PresetFiltersElementCollection PresetFilter 
    { 
     get 
     { 
      return this[propPresets] as PresetFiltersElementCollection; 
     } 
    } 
} 

public class PresetFiltersElementCollection : ConfigurationElementCollection 
{ 
    public PresetFiltersElementCollection() 
    { 
     properties = new ConfigurationPropertyCollection(); 
    } 

    private static ConfigurationPropertyCollection properties; 

    protected override ConfigurationPropertyCollection Properties 
    { 
     get 
     { 
      return properties; 
     } 
    } 

    public override ConfigurationElementCollectionType CollectionType 
    { 
     get 
     { 
      return ConfigurationElementCollectionType.BasicMap; 
     } 
    } 

    protected override string ElementName 
    { 
     get 
     { 
      return "add"; 
     } 
    } 

    protected override ConfigurationElement CreateNewElement() 
    { 
     return new PresetFiltersElement(); 
    } 

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     var elm = element as PresetFiltersElement; 
     if (elm == null) throw new ArgumentNullException(); 
     return elm.KeyName; 
    } 
} 

public class PresetFiltersElement : ConfigurationElement 
{ 
    private static ConfigurationPropertyCollection properties; 
    private static ConfigurationProperty propKey; 

    protected override ConfigurationPropertyCollection Properties 
    { 
     get 
     { 
      return properties; 
     } 
    } 

    public PresetFiltersElement() 
    { 
     propKey = new ConfigurationProperty("key", typeof(string), 
                 null, 
                 ConfigurationPropertyOptions.IsKey); 
     properties = new ConfigurationPropertyCollection { propKey }; 
    } 

    public PresetFiltersElement(string keyName) 
     : this() 
    { 
     KeyName = keyName; 
    } 

    public string KeyName 
    { 
     get 
     { 
      return this[propKey] as string; 
     } 
     set 
     { 
      this[propKey] = value; 
     } 
    } 
} 
+0

Вам нужно добавить configSection, см. Https://msdn.microsoft.com/en-us/library/2tw134k3.aspx –

+0

спасибо, сделал (как мое редактирование), до сих пор ничего не происходит. –

+0

Если я переведу его в консольное приложение, он отлично работает, это библиотека классов, и она не работает. Он читает файл file.dll.config, хотя у меня есть другие части в конфигурации, которые работают нормально. –

ответ

0

Вам нужно что-то вроде этого в вашем app.config, иначе приложение не будет знать, как обработать новый раздел.

<configSections> 
    <sectionGroup name="pageAppearanceGroup"> 
     <section 
     name="PresetFilters" 
     type="PresetFiltersConfiguration" 
     allowLocation="true" 
     allowDefinition="Everywhere" 
     /> 
    </sectionGroup> 
    </configSections> 
+0

спасибо, сделал (как мое редактирование), до сих пор ничего не происходит. Пробовал группу тоже, то же самое. –

+0

Если я переведу его в консольное приложение, он отлично работает, это библиотека классов, и она не работает. Он читает файл file.dll.config, хотя у меня есть другие части в конфигурации, которые работают нормально. –

0

После применения исправления он работал, но фактическая ошибка должна сделать с ним не работает для библиотек классов, и я создал новый вопрос для этого.

Спасибо.