Пользовательские теги в App.config — тип моего класса ConfigurationSection не распознан

Я следовал (почти) дословно примеру из MSDN для создания пользовательских тегов в моем App.config (см. документацию здесь: https://msdn.microsoft.com/en-us/library/2tw134k3.aspx), но я получаю эту ошибку:

Произошло необработанное исключение типа «System.Configuration.ConfigurationErrorsException» в System.configuration.dll.

Дополнительная информация. Произошла ошибка при создании обработчика раздела конфигурации для MyServiceGroup/ServiceUpdater: не удалось загрузить тип «MyNamespace.ServiceUpdaterSection» из сборки «System.configuration, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f33d50a4a».

и ошибка возникает в этой строке (внутри Main из моего консольного приложения, когда я пытаюсь использовать пользовательскую информацию из App.config):

MyNamespace.ServiceUpdaterSection serviceUpdaterSection =
(ServiceUpdaterSection)ConfigurationManager.GetSection("MyServiceGroup/ServiceUpdater");

и из сообщения об ошибке я уже вижу, что это связано с тем, что он пытается найти MyNamespace.ServiceUpdaterSection внутри System.Configuration, напротив, он должен найти этот класс (ServiceUpdaterSection) внутри MyNamespace, поскольку я дал ему полное имя.

Вот как выглядит мой App.config:

<configSections>
    <sectionGroup name="MyServiceGroup">
      <section name="ServiceUpdater" type="MyNamespace.ServiceUpdaterSection"/>
    </sectionGroup>
    </configSections>

и ниже внутри App.config у меня есть:

<MyServiceGroup>
    <ServiceUpdater>
      <licenseKey id="blablabla"/>
    </ServiceUpdater>     

As for the ServiceUpdaterSection class, it looks as follows:

namespace MyNamespace
{
    public class LicenseKeyElement : ConfigurationElement
    {
        [ConfigurationProperty("id")]
        public string Id
        {
            get
            {
                return (string)this["id"];
            }
            set
            {
                this["id"] = value;
            }
        }
    }
    public class ServiceUpdaterSection : ConfigurationSection
    {
        [ConfigurationProperty("licenseKey")]
        public LicenseKeyElement LicenseKey
        {
            get
            {
                return (LicenseKeyElement)this["licenseKey"];
            }
            set
            {
                this["licenseKey"] = value;
            }
        }
    }

}

Что вы думаете по этому поводу, пожалуйста?

Спасибо.


person Sami    schedule 30.06.2017    source источник


Ответы (1)


Ошибка была здесь:

 <section name="ServiceUpdater" type="MyNamespace.ServiceUpdaterSection"/>

что должно было быть:

 <section name="ServiceUpdater" type="MyNamespace.ServiceUpdaterSection, MyNamespace"/>

Оставлю это на случай, если кто-то еще столкнется с той же проблемой.

person Sami    schedule 30.06.2017