app.config 配置多项 配置集合 自定义配置(4) 自动增加配置项到配置文件的两种方法

一,按照xml文件处理:

配置文件如下图(最后的图片).

自动写入configSections和configSections的实例

1.自动写入configSections

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            LasteventSettingSection last = new LasteventSettingSection();

            config.Sections.Add("lastevent", last);
             config.Save();

2.自动写入实例

我觉得不应该将.config文件当成xml来操作.但是一直没有找到方法用ConfigurationManager来实现,先用这个顶着.

 1  System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
 2             doc.Load("ConfigurationTest.exe.Config");
 3 
 4             XmlNodeList nodes = doc.ChildNodes[1].ChildNodes;
 5 
 6             foreach (XmlNode node in nodes)
 7             {
 8                 Console.WriteLine(node.InnerXml);
 9             }
10 
11 
12             XmlNode newnode = doc.ChildNodes[1];
13 
14             foreach (XmlNode v in newnode.ChildNodes)
15             {
16                 if (v.Name == "lastevent")
17                 {
18                     Console.WriteLine("lastevent 已经存在");
19                     return;
20                 }
21             }
22 
23             XmlElement elem = doc.CreateElement("lastevent");
24             XmlAttribute att = doc.CreateAttribute("name");
25             att.Value = "用于替换lastevent中不想看到的内容";
26             elem.Attributes.Append(att);
27 
28 
29             XmlElement Items = doc.CreateElement("Items");
30             elem.AppendChild(Items);
31 
32 
33             XmlElement add1 = doc.CreateElement("add");
34 
35             XmlAttribute original = doc.CreateAttribute("original");
36             original.Value = "original";
37             add1.Attributes.Append(original);
38 
39             XmlAttribute replacement = doc.CreateAttribute("replacement");
40             replacement.Value = "replacement";
41             add1.Attributes.Append(replacement);
42 
43             Items.AppendChild(add1);
44 
45             elem.AppendChild(Items);
46 
47 
48             newnode.AppendChild(elem);
49 
50             doc.Save("111.config");

 二.用ConfigurationManager类来处理

上面提到的不用xml处理的方法,已经找到了.

原来配置文件为

运行代码后变成:

代码为:

 1  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 2 
 3             LasteventSettingSection section = new LasteventSettingSection();
 4             section.Name = "替换";
 5 
 6             ConfigurationTest.Items its = new ConfigurationTest.Items();
 7 
 8 
 9 
10             Item it = new Item();
11             it.Original = "error";
12             it.Replacement = "information";
13 
14             its.Add(it);
15 
16              it = new Item();
17             it.Original = "error2";
18             it.Replacement = "information2";
19 
20             its.Add(it);
21 
22             section.Items = its;
23 
24             LasteventSettingSection lastevent = (LasteventSettingSection)config.Sections["lastevent"];
25             if (lastevent == null) {
26                 config.Sections.Add("lastevent", section);
27             }
28             config.Save();

 实现的类如下:

注意:前面几个例子中,继承ConfigurationElementCollection的Items没有实现add,remove方法,必须实现才可以.

  class LasteventSettingSection : System.Configuration.ConfigurationSection
    {
        [ConfigurationProperty("name", IsRequired = false)]
        public string Name
        {
            get { return (string)base["name"]; }
            set { base["name"] = value; }
        }

        [ConfigurationProperty("items", IsDefaultCollection = false)]
        [ConfigurationCollection(typeof(Item), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap, RemoveItemName = "remove")]
        public Items Items
        {
            get { return (Items)base["items"]; }
            set { base["items"] = value; }
        }
    }



    class Item : ConfigurationElement
    {
        [ConfigurationProperty("original", IsRequired = true, IsKey = true)]
        public string Original
        {
            get { return (string)base["original"]; }
            set { base["original"] = value; }
        }
        [ConfigurationProperty("replacement", IsRequired = true)]
        public string Replacement
        {
            get { return (string)base["replacement"]; }
            set { base["replacement"] = value; }
        }
    }

    class Items : ConfigurationElementCollection
    {
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((Item)element).Original;
        }

        protected override ConfigurationElement CreateNewElement()
        {
            return new Item();
        }

        public Item this[int i]
        {
            get { return (Item)base.BaseGet(i); }
        }

        new public Item this[string key]
        {
            get { return (Item)base.BaseGet(key); }
        }

        public int IndexOf(Item url)
        {
            return BaseIndexOf(url);
        }

        public void Add(Item url)
        {
            BaseAdd(url);

            // Your custom code goes here.

        }

        protected override void BaseAdd(ConfigurationElement element)
        {
            BaseAdd(element, false);

            // Your custom code goes here.

        }

        public void Remove(Item url)
        {
            if (BaseIndexOf(url) >= 0)
            {
                BaseRemove(url.Original);
                // Your custom code goes here.
                Console.WriteLine("UrlsCollection: {0}", "Removed collection element!");
            }
        }

        public void RemoveAt(int index)
        {
            BaseRemoveAt(index);

            // Your custom code goes here.

        }

        public void Remove(string name)
        {
            BaseRemove(name);

            // Your custom code goes here.

        }

        public void Clear()
        {
            BaseClear();

            // Your custom code goes here.
            Console.WriteLine("UrlsCollection: {0}", "Removed entire collection!");
        }

    }
 
原文地址:https://www.cnblogs.com/birds-zhu/p/6918119.html