首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未识别的元素“处理器”-自定义控制部分

未识别的元素“处理器”-自定义控制部分
EN

Stack Overflow用户
提问于 2015-02-27 09:28:47
回答 2查看 141关注 0票数 0

试图在这里的另一篇文章后面添加一个自定义配置部分,但是我得到了错误:

'System.Configuration.ConfigurationErrorsException‘类型的未处理异常发生在System.Configuration.dll中 附加信息:无法识别的元素“处理器”。

在这条线上:

代码语言:javascript
复制
return (ProcessorsConfig)ConfigurationManager.GetSection("Processors") ?? new ProcessorsConfig();

这是我的代码:

代码语言:javascript
复制
public class ProcessorsConfig : ConfigurationSection
{
    public static ProcessorsConfig GetConfig()
    {
        return (ProcessorsConfig)ConfigurationManager.GetSection("Processors") ?? new ProcessorsConfig();
    }

    [ConfigurationProperty("Processors")]
    [ConfigurationCollection(typeof(Processors), AddItemName = "Processor")]
    public Processors Processors
    {
        get
        {
            object o = this["Processors"];
            return o as Processors;
        }
    }
}



[ConfigurationCollection(typeof(Processor), AddItemName="Processor", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class Processors : ConfigurationElementCollection
{
    public Processor this[int index]
    {
        get
        {
            return base.BaseGet(index) as Processor;
        }
        set
        {
            if (base.BaseGet(index) != null)
                base.BaseRemoveAt(index);

            this.BaseAdd(index, value);
        }
    }

    public new Processor this[string responseString]
    {
        get { return (Processor)BaseGet(responseString); }
        set
        {
            if (BaseGet(responseString)!=null)
                BaseRemoveAt(BaseIndexOf(BaseGet(responseString)));

            BaseAdd(value);
        }
    }

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

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((Processor)element).Name;
    }
}

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

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

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

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

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

我的app.config:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="Processors" type="Ideagen.PHE_PMEP_Processor_v2.Config.ProcessorsConfig, PHEPMEPProcessorv2"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <appSettings>
  </appSettings>

  <Processors>
    <Processor name="test" collectionFolder="c:\temp\phev2\collection" searchPattern="*.txt" failureFolder="c:\temp\phev2\failure" xmlOutputFolder="c:\temp\phev2\xmlout"></Processor>
  </Processors>
</configuration>

有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 09:35:07

现在我们有了..。

要使上面的代码正常工作,我需要将“处理器”元素封装在“处理器”部分中,并使用另一个“处理器”元素:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="Processors" type="Ideagen.PHE_PMEP_Processor_v2.Config.ProcessorsConfig, PHEPMEPProcessorv2"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <appSettings>
  </appSettings>

  <Processors>
    <Processors>
      <Processor name="test" collectionFolder="c:\temp\phev2\collection" searchPattern="*.txt" failureFolder="c:\temp\phev2\failure" xmlOutputFolder="c:\temp\phev2\xmlout"></Processor>
    </Processors>
  </Processors>
</configuration>

但是,为了获得更清晰的解决方案,我将app.config更改为:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="ProcessorConfig" type="Ideagen.PHE_PMEP_Processor_v2.Config.ProcessorsConfig, PHEPMEPProcessorv2"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <appSettings>
  </appSettings>

  <ProcessorConfig>
    <Processors>
      <Processor name="test" collectionFolder="c:\temp\phev2\collection" searchPattern="*.txt" failureFolder="c:\temp\phev2\failure" xmlOutputFolder="c:\temp\phev2\xmlout"></Processor>
    </Processors>
  </ProcessorConfig>
</configuration>

并将我的ProcessorConfig类更改如下:

代码语言:javascript
复制
public static ProcessorsConfig GetConfig()
        {
            return (ProcessorsConfig)ConfigurationManager.GetSection("ProcessorConfig") ?? new ProcessorsConfig();
        }

星期五..。新的星期一

票数 0
EN

Stack Overflow用户

发布于 2015-02-27 18:38:32

为了让它像你在最初的帖子里那样工作你可以.

代码语言:javascript
复制
<configuration>
    <configSections>
        <sectionGroup name="Processors">
            <section name="Processor" type="Ideagen.PHE_PMEP_Processor_v2.Config.ProcessorsConfig, PHEPMEPProcessorv2"/>
        </sectionGroup>
    </configSections>
    <Processors>
        <Processor name="test" collectionFolder="c:\temp\phev2\collection" searchPattern="*.txt" failureFolder="c:\temp\phev2\failure" xmlOutputFolder="c:\temp\phev2\xmlout"></Processor>
    </Processors>
</configuration>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28761566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档