C# App.config学习

进入公司一年多来,对配置文件添加了不少参数,但是从未想过这些参数是如何被读取出来的,今天把读取参数的处理看了一下,收获不少。假定有App.config如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="family" type="FirstRowTest.Configuration.Settings,FirstRowTest"/>
  </configSections>
<family>
  <familymember>
    <member status="father"
            birth="1954"
            name="AA"
            hobby="reading books">
    </member>
    <member status="mother"
            birth="1958"
            name="BB"
            hobby="chatting">
    </member>
    <member status="elder brother"
            birth="1982"
            name="CC"
            hobby="money">
    </member>
    <member status="younger brother"
            birth="1986"
            name="DD"
            hobby="computer">
    </member>
  </familymember>
</family>
  <appSettings>
    <add key="address" value="maling"/>
  </appSettings>
</configuration>

构造:

    public class Param:System.Configuration.ConfigurationElement
    {
        [System.Configuration.ConfigurationProperty("status")]
        public string Status
        {
            get
            {
                return this["status"] as string;
            }
            set
            {
                this["status"] = value;
            }
        }
        [System.Configuration.ConfigurationProperty("birth")]
        public string Birth
        {
            get
            {
                return this["birth"] as string;
            }
            set
            {
                this["birth"] = value;
            }
        }
        [System.Configuration.ConfigurationProperty("name")]
        public string Name
        {
            get
            {
                return this["name"] as string;
            }
            set
            {
                this["name"] = value;
            }
        }
        [System.Configuration.ConfigurationProperty("hobby")]
        public string Hobby
        {
            get
            {
                return this["hobby"] as string;
            }
            set
            {
                this["hobby"] = value;
            }
        }
    }

    public class Params:System.Configuration.ConfigurationElementCollection
    {
        protected override System.Configuration.ConfigurationElement CreateNewElement()
        {
            return new Param();
        }
        protected override object GetElementKey(System.Configuration.ConfigurationElement element)
        {
            Param param = element as Param;
            return param.Status;
        }
        protected override string ElementName
        {
            get
            {
                return "member";
            }
        }
        public override System.Configuration.ConfigurationElementCollectionType CollectionType
        {
            get
            {
                return System.Configuration.ConfigurationElementCollectionType.BasicMap;
            }
        }

    }

    public class Settings:System.Configuration.ConfigurationSection
    {
        [System.Configuration.ConfigurationProperty("familymember")]
        public Params FamilyMember
        {
            get
            {
                return this["familymember"] as Params;
            }
            set
            {
                this["familymember"] = value;
            }
        }
    }

调用:

        public FrmMain()
        {
            InitializeComponent();
        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            System.Configuration.Configuration cfg = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
            //Settings setting = cfg.GetSection("family") as Settings;
            Settings setting = System.Configuration.ConfigurationManager.GetSection("family") as Settings;
            Param first = null;
            if (null != setting)
            {
                foreach (Param p in setting.FamilyMember)
                {
                    if (null == first)
                    {
                        first = p;
                    }
                    this.richTextBox1.AppendText(string.Format("status:{0}|birth:{1}|name:{2}|hobby:{3}\r\n",

                                                                p.Status, p.Birth, p.Name, p.Hobby));
                }
            }
            //cfg.Save();
            System.Configuration.ConfigurationManager.RefreshSection("family");
        }
    }

C# App.config学习

如果需要进行保存,则处理上有一点变动:

    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            System.Configuration.Configuration cfg = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
            Settings setting = cfg.GetSection("family") as Settings;
            //Settings setting = System.Configuration.ConfigurationManager.GetSection("family") as Settings;
            Param first = null;
            if (null != setting)
            {
                foreach (Param p in setting.FamilyMember)
                {
                    if (null == first)
                    {
                        first = p;
                    }
                    this.richTextBox1.AppendText(string.Format("status:{0}|birth:{1}|name:{2}|hobby:{3}\r\n",

                                                                p.Status, p.Birth, p.Name, p.Hobby));
                }
            }

            first.Name = "I dont know";
            cfg.Save();
            //System.Configuration.ConfigurationManager.RefreshSection("family");
        }

保存结果:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="family" type="FirstRowTest.Configuration.Settings,FirstRowTest"/>
  </configSections>
<family>
  <familymember>
    <member status="father" birth="1954" name="I dont know" hobby="reading books" />
    <member status="mother" birth="1958" name="BB" hobby="chatting" />
    <member status="elder brother" birth="1982" name="CC" hobby="money" />
    <member status="younger brother" birth="1986" name="DD" hobby="computer" />
  </familymember>
</family>
  <appSettings>
    <add key="address" value="maling"/>
  </appSettings>
</configuration>

 

上面学习了配置文件读取的处理方式,但是没有对经常用到的 <appSettings>进行学习,其实这些参数的读取要简单得多:
假设有如下配置参数

  <appSettings>
    <add key="address" value="China"/>
  </appSettings>

读取:

string address=System.Configuration.ConfigurationManager.AppSettings["address"].ToString();

事实就是这么简单