C#除了appSettings和connectionStrings默认配置外还允许用户自定义使用配置。C# 提供3中简单的自定义配置,配置文件如下
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="Config1" type="System.Configuration.SingleTagSectionHandler"/> <section name="Config2" type="System.Configuration.DictionarySectionHandler"/> <section name="Config3" type="System.Configuration.NameValueSectionHandler"/> </configSections> <Config1 a="1" b="2"/> <Config2> <add key="a" value="1"/> <add key="b" value="2"/> </Config2> <Config3> <add key="a" value="1"/> <add key="b" value="2"/> </Config3> </configuration>
使用这3种中配置要注意:
1. configSections节点必须要是配置的第一个节点。
2. 自定义配置要在configSections内部声明。格式是<section name="配置名" type="类的全路径,dll名"/> 系统的这3种配置dll省略。
3. 针对以上3种配置格式不能变,不能变,不能变,重要的事说3遍 。<Config1 a="1" b="2"></Config1 > 这种写法 抛出异常。
这3中使用也比较简单,用ConfigurationManager.GetSection(XXX)获取节点数据。第一种和第二种都返回Hashtable类型(Hashtable实现IDictionary接口),第三种返回NameValueCollection 与appSettings返回类型相同。
1 public static void Main(string[] args) 2 { 3 // Hashtable 4 Hashtable config1 = (Hashtable)ConfigurationManager.GetSection("Config1"); 5 Dictionary<string, string> c = new Dictionary<string, string>(); 6 Console.WriteLine("****************配置1**********************"); 7 Console.WriteLine("遍历"); 8 foreach (DictionaryEntry g in config1) 9 { 10 Console.WriteLine(g.Key + "=" + g.Value); 11 } 12 Console.WriteLine("使用:a=" + config1["a"]); 13 14 15 Hashtable config2 = (Hashtable)ConfigurationManager.GetSection("Config2"); 16 Console.WriteLine("****************配置2**********************"); 17 Console.WriteLine("遍历"); 18 foreach (DictionaryEntry g in config1) 19 { 20 Console.WriteLine(g.Key + "=" + g.Value); 21 } 22 Console.WriteLine("使用:a=" + config1["a"]); 23 24 25 26 Console.WriteLine("****************配置3**********************"); 27 NameValueCollection config3 = (NameValueCollection)ConfigurationManager.GetSection("Config3"); 28 Console.WriteLine("遍历"); 29 foreach (var item in config3.AllKeys) 30 { 31 Console.WriteLine(item + "=" + config3[item]); 32 } 33 Console.WriteLine("使用:a=" + config3["a"]); 34 35 Console.ReadLine(); 36 }