无法识别的元素 "Processor" - 自定义配置部分
Unrecognised Element "Processor" - Custom Config Section
尝试在此处的另一个 post 之后添加自定义配置部分,但出现错误:
An unhandled exception of type
'System.Configuration.ConfigurationErrorsException' occurred in
System.Configuration.dll
Additional information: Unrecognized element 'Processor'.
这一行:
return (ProcessorsConfig)ConfigurationManager.GetSection("Processors") ?? new ProcessorsConfig();
这是我的代码:
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:
<?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>
有什么线索吗?
我们在这里...
为了使上面的代码正常工作,我需要将 "Processor" 元素与另一个 "Processors" 元素一起包装在 "Processors" 部分中:
<?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 更改为:
<?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 class 如下:
public static ProcessorsConfig GetConfig()
{
return (ProcessorsConfig)ConfigurationManager.GetSection("ProcessorConfig") ?? new ProcessorsConfig();
}
星期五..新的星期一
要让它像原来那样工作 post 你可以...
<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>
尝试在此处的另一个 post 之后添加自定义配置部分,但出现错误:
An unhandled exception of type 'System.Configuration.ConfigurationErrorsException' occurred in System.Configuration.dll
Additional information: Unrecognized element 'Processor'.
这一行:
return (ProcessorsConfig)ConfigurationManager.GetSection("Processors") ?? new ProcessorsConfig();
这是我的代码:
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:
<?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>
有什么线索吗?
我们在这里...
为了使上面的代码正常工作,我需要将 "Processor" 元素与另一个 "Processors" 元素一起包装在 "Processors" 部分中:
<?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 更改为:
<?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 class 如下:
public static ProcessorsConfig GetConfig()
{
return (ProcessorsConfig)ConfigurationManager.GetSection("ProcessorConfig") ?? new ProcessorsConfig();
}
星期五..新的星期一
要让它像原来那样工作 post 你可以...
<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>