zoukankan      html  css  js  c++  java
  • 自定义配置文件读取产生的“无法添加已属于该配置的 ConfigurationSection”异常解决办法

    最近在编写一个读写自定义配置文件的功能时遇到一个问题,在初始化的时候读入配置显示出来,修改后把配置回存到配置文件,在回存的时候,先移除配置节,再添加,在添加的时候遇到如下的异常:

    {"无法添加已属于该配置的 ConfigurationSection。"}

    经过一番搜索在网上找到了问题的原因和解决办法。

    造成这个异常的原因是我的自定义的ConfigurationSection已经连接到了System.Configuration.Configuration对象,即在读取配置文件时已经把对象连接到了一个 System.Configuration.Configuration,回写的时候就不能用这个对象了,new 一个新的自定义配置对象就可以解决这个问题了。

    //首先加载外部配置
                System.Configuration.ExeConfigurationFileMap fm = new ExeConfigurationFileMap();
                fm.ExeConfigFilename = file;
                Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fm, ConfigurationUserLevel.None);
                Patrol simple = config.GetSection("patrol") as Patrol; 
                //然后需要New一个对象   
                Patrol simpleNew = new Patrol();
                simpleNew.Shifts.Add(new Shift() { Name = "123" });
                //保存到本地配置
                Configuration configLocal = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                if (configLocal.Sections.Get("patrol") == null)
                {
                    configLocal.Sections.Add("patrol", simpleNew);//这个地方不能直接用simple,不然会报错“无法添加已属于该配置的 ConfigurationSection”
                    configLocal.Save(ConfigurationSaveMode.Minimal, true);
                    ConfigurationManager.RefreshSection("configSections");
                    //
                    MessageBox.Show("保存成功!");
                }
                else
                {
                    MessageBox.Show("已经存在!");
                }
                //
                Patrol simpleLocal = configLocal.GetSection("patrol") as Patrol;
                Shift shift = simpleLocal.Shifts[0];
                string name = shift.Name;

    参考

    http://www.cnblogs.com/endlock/archive/2010/06/11/1756577.html

  • 相关阅读:
    如何动态确定命名空间
    五种提高 SQL 性能的方法
    无意间发现收藏夹的秘密(^_^,也许大家早就知道了?)
    每个开发人员现在应该下载的十种必备工具,这个是中文的哦
    一个让我狂晕的异常及例行xiao总结
    几个开源项目实体层实现方式比较
    线程池在web上的简单应用
    不为"事务"而"事务"
    构造函数,静态构造函数与继承链
    小Tips两则
  • 原文地址:https://www.cnblogs.com/tianciliangen/p/7196716.html
Copyright © 2011-2022 走看看