自定义C#config无法识别的元素exception
我在App.config中有以下针对.NET 3.5 Windows服务的位:
我在configurationServiceSection.config中有这个:
这是代码:
using System.Configuration; namespace SomeApp.Framework.Configuration { public sealed class ConfigurationServiceSection : ConfigurationSection { [ConfigurationProperty("ConfigurationServices", IsDefaultCollection = true, IsRequired = true)] [ConfigurationCollection(typeof(ConfigurationServices))] public ConfigurationServices ConfigurationServices { get { return (ConfigurationServices)base["ConfigurationServices"]; } } } public sealed class ConfigurationServices : ConfigurationElementCollection { protected override ConfigurationElement CreateNewElement() { return new ConfigurationService(); } protected override object GetElementKey(ConfigurationElement element) { ConfigurationService configService = (ConfigurationService) element; return configService.Name; } } public sealed class ConfigurationService : ConfigurationElement { /// /// name /// [ConfigurationProperty("name", IsKey = true, IsRequired = true)] public string Name { get { return (string)this["name"]; } set { this["name"] = value; } } /// /// host /// [ConfigurationProperty("host", IsKey = false, IsRequired = true)] public string Host { get { return (string)this["host"]; } set { this["host"] = value; } } /// /// port /// [ConfigurationProperty("port", IsKey = false, IsRequired = true)] public string Port { get { return (string)this["port"]; } set { this["port"] = value; } } /// /// location /// [ConfigurationProperty("location", IsKey = false, IsRequired = true)] public string Location { get { return (string)this["location"]; } set { this["location"] = value; } } } }
当我尝试使用以下内容访问配置时:
var configurationServiceSection = (ConfigurationServiceSection)configuration.GetSection("ConfigurationServiceSection");
我得到这个例外:
Unrecognized element 'ConfigurationService'. (C:\Code\branches\ConfigurationService\SomeApp\Src\ConfigService\SomeApp.ConfigService.WindowsService\bin\Debug\ConfigSections\configurationServiceSection.config line 3)
一切都看起来对我来说?
有什么想法吗? 谢谢。
好了到底:
我将’AddItemName’添加到ConfigurationServiceSection类,如下所示:
public sealed class ConfigurationServiceSection : ConfigurationSection { [ConfigurationProperty("ConfigurationServices", IsDefaultCollection = true, IsRequired = true)] [ConfigurationCollection(typeof(ConfigurationServices), AddItemName = "ConfigurationService")] public ConfigurationServices ConfigurationServices { get { return (ConfigurationServices)base["ConfigurationServices"]; } } }
另一种方法是覆盖CollectionType和ElementName属性,如下所示:
public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMap; } } protected override string ElementName { get { return "ConfigurationService"; } }