当自定义应用程序配置节中出现树型结构时将引发异常
来源:互联网 发布:少爷的男仆 网络剧 编辑:程序博客网 时间:2024/04/28 16:23
发现当自定义应用程序配置节中出现树型结构时将引发 “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 ConfigurationPropertyCreateConfigurationPropertyFromAttributes(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
- 当自定义应用程序配置节中出现树型结构时将引发异常
- 应用程序配置文件中读取自定义配置节
- 当freemarker中EL表达式的值为空时出现异常的解决方法
- Android 当出现未捕获异常的时候,彻底退出应用程序
- [学习笔记]C#中使用EmguCv时出现的 “Emgu.CV.CvInvoke”的类型初始值设定项引发异常
- 无法调试 ASP.NET 应用程序时出现"未将项目配置为进行调试"的错误信息
- 调试 ASP.NET 应用程序时出现"未将项目配置为进行调试"的错误信息
- 将异常写入事件日志中(一):将异常写入应用程序的事件日志中
- LINQ:当尝试更改外键但已加载实体时引发。更改时主外键表时异常
- 计算阶乘-当输入的数据是带小数时引发异常
- 您希望通过将所有ArrayList对象替换为相应的泛型版本以提高应用程序的效率,并使得代码更易于使用。当结构体或其他值类型存储在这些数据结构中时,会导致装箱/拆箱操作,这时就需要这么做。
- 当RecycleView跟ScrollView冲突设置自定义LinearLayoutManager的时候出现IllegalArgumentException异常
- 当发生异常时,怎样能不让‘delphi的异常提示框出现’而出现自己的‘异常提示框’?
- <a>中调用自定义JS函数传值出现异常
- 自定义Exception类,将异常输出到本地文件中
- 8.编写一个除法计算器,程序具有try-catch-finally结构,程序要求用户输入除数和被除数,在出现除数为零(异常2)和除数、被除数中有一个不是数字(异常1)的情况时进行相应的处理。当调用存放
- .Net 自定义应用程序配置
- .Net 自定义应用程序配置
- GCC参数详解
- 看了就会笑的真理
- 添删改时用div + iframe 实现弹出式窗体
- 巧妙使用VIM系列一 2009-12-25 09:26:28
- 转:C/C++:memmove、memcpy、strcpy三者的区别
- 当自定义应用程序配置节中出现树型结构时将引发异常
- 搞pp 需要搞清楚的几个基本东东
- C#画线控件的开发应用实例解析
- SDRAM大小的判断
- 能力判断
- 【crontab】命令详解
- Symbian OS应用开发学习笔记之通讯录(转)
- 红旗Linux6下网络编程Socket
- 哥德巴赫猜想的解析