app.config自定义配置段实现遇Unrecognized element 'add'错误求助
问题根源
你遇到的Unrecognized element 'add'错误来源于两处代码疏漏:
GroupConfigElement类的Phrases属性未添加[ConfigurationProperty]特性,.NET配置系统无法识别该属性为配置节点的合法子元素- 你配置结构中
<Group>节点下直接存放<add>元素,没有额外的包裹节点,而原代码中Phrases属性尝试读取键为Groups的子节点,和实际结构不匹配
修复方案
只需要修改GroupConfigElement类的Phrases属性定义,添加特性标记为默认集合即可:
public class GroupConfigElement : ConfigurationElement { [ConfigurationProperty("groupname", IsRequired = true, IsKey = true)] public string GroupName { get { return (string)this["groupname"]; } set { this["groupname"] = value; } } // 新增特性:空字符串对应默认子元素集合,标记为默认集合 [ConfigurationProperty("", IsDefaultCollection = true)] public PhraseCollection Phrases { // 取值键同步修改为空字符串 get { return (PhraseCollection) base[""]; } } }
可选优化
如果后续需要支持<remove>、<clear>等配置操作,可以修改PhraseCollection的集合类型:
[ConfigurationCollection(typeof(PhraseConfigElement), AddItemName = "add", RemoveItemName = "remove", ClearItemsName = "clear", CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)] public class PhraseCollection: ConfigurationElementCollection { // 其余代码保持不变 }
验证读取
修复后可以通过以下代码读取配置:
var configSection = (DomainSolutionSection)ConfigurationManager.GetSection("domainSolutionSection"); // 读取Legacy分组下的所有应用名 var legacyApps = configSection.DomainSolutionGroups["Legacy"].Phrases .Cast<PhraseConfigElement>() .Select(p => p.Name) .ToList();
内容的提问来源于stack exchange,提问作者DaveyBoy
相关产品推荐
相关产品推荐

