当自定义应用程序配置节中出现树型结构时将引发异常

发现当自定义应用程序配置节中出现树型结构时将引发 “System.StackOverflowException” 类型异常.

程序集: System.Configuration, Version=2.0.0.0

 

例: 使用NodeElement(从ConfigurationElement派生)实现自定义配置节, 

当获取其属性数据时出现"未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。". 

 

代码如下:

  
  
public class NodeElement : ConfigurationElement {
[ConfigurationProperty( " text " , IsRequired = true )]
public string Text {
get { return ( string ) this [ " text " ]; }
}
[ConfigurationProperty( " child " )]
public NodeElement ChildElement {
get {
return (NodeElement) this [ " child " ];
}
}
}

static class Program {
[STAThread]
static void Main() {
NodeElement node = new NodeElement();
object o = node.ChildElement; // 异常将出现在这里
}
}

 

使用 .NET Reflector 查看 System.Configuration.ConfigurationElement 源代码后发现, 

当创建 ConfigurationProperty 时缺少对属性类型与其当前类型的对比判断, 导致无限递归.

 

代码如下:

  
  
private static ConfigurationProperty 
CreateConfigurationPropertyFromAttributes(PropertyInfo propertyInformation)
{
ConfigurationProperty property = null ;
if (Attribute.GetCustomAttribute(propertyInformation, 
  typeof (ConfigurationPropertyAttribute)) is ConfigurationPropertyAttribute)
{
property = new ConfigurationProperty(propertyInformation);
}

//问题出现在下面这句判断
//此处缺少对 property.Type 与当前其所属类型的判断
//导致 PropertiesFromType 方法无限递归.
if ((property != null ) &&  
  typeof (ConfigurationElement).IsAssignableFrom(property.Type))
{
ConfigurationPropertyCollection result = null ;
PropertiesFromType(property.Type, out result);
}
return property;
}

 

原文(我的cnblogs): http://www.cnblogs.com/mix-up/archive/2009/12/24/1631467.html 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值