App.config中的自定义标记 - 我的ConfigurationSection类的类型无法识别

时间:2017-06-30 17:43:56

标签: asp.net configuration custom-tag

我已经(几乎)跟着来自MSDN的示例,在我的App.config中创建自定义标签(在此处查找文档: https://msdn.microsoft.com/en-us/library/2tw134k3.aspx)但是我收到了这个错误:

  

未处理的类型异常   ' System.Configuration.ConfigurationErrorsException'发生在   System.configuration.dll

     

其他信息:创建配置时出错   MyServiceGroup / ServiceUpdater的部分处理程序:无法加载类型   ' MyNamespace.ServiceUpdaterSection'从装配   ' System.configuration,Version = 4.0.0.0,Culture = neutral,   公钥= b03f5f7f33d50a4a'

并且在此行上触发错误(当我尝试使用App.config中的自定义信息时,从我的控制台应用程序中的Main内部):

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

从错误消息中我已经可以看到这是因为它试图在System.Configuration中找到MyNamespace.ServiceUpdaterSection,相反,它应该在MyNamespace中找到这个类(ServiceUpdaterSection),因为我已经给它了完全限定名称。

以下是我的App.config的外观:

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

进一步在App.config里面我有:

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

对于ServiceUpdaterSection类,它看起来如下:

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;
            }
        }
    }

}

您对此有何看法?

谢谢。

1 个答案:

答案 0 :(得分:0)

错误在于:

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

应该是:

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

如果其他人遇到同样的问题,请留下它。