最近在编写一个读写自定义配置文件的功能时遇到一个问题,在初始化的时候读入配置显示出来,修改后把配置回存到配置文件,在回存的时候,先移除配置节,再添加,在添加的时候遇到如下的异常:
{"无法添加已属于该配置的 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