.Net App.Config 读取

  • .Net App.Config 读取已关闭评论
  • 143 次浏览
  • A+
所属分类:.NET技术
摘要

经常能在.Net 项目中看到App.Config/Web.Config , 一直没有了解过.Net 自带的对配置文件的读写操作,常规的操作类在 System.Configuration.dll 中 ,比较重要的类为ConfigurationManager

经常能在.Net 项目中看到App.Config/Web.Config , 一直没有了解过.Net 自带的对配置文件的读写操作,常规的操作类在 System.Configuration.dll 中 ,比较重要的类为ConfigurationManager

AppSetting 及 ConnectionString 的读取

<?xml version="1.0" encoding="utf-8" ?> <configuration>   <configSections>     <sectionGroup name="MyGroup" type="AppConfig.MyGroup,Appconfig">       <section name="MySection" type="AppConfig.MySection,Appconfig" />     </sectionGroup>     <section name="MySection" type="AppConfig.MySection,Appconfig" />   </configSections>   <appSettings>     <add key="A" value="a"/>     <add key="B" value="b"/>     <add key="C" value="c"/>   </appSettings>   <connectionStrings>     <add connectionString="123" name="1"/>     <add connectionString="456" name="2"/>   </connectionStrings>   <MySection Code="asdas">     <Member Id="dasd"/>     <Members>       <add Id="1"/>       <add Id="2"/>       <add Id="3"/>     </Members>   </MySection>   <MyGroup>     <MySection Code="asdas1">       <Member Id="dasd1"/>       <Members>         <add Id="12"/>         <add Id="22"/>       </Members>     </MySection>   </MyGroup> </configuration> 

指定AppSetting 的 读取

        public string GetAppSettingValue(string appSettingName)         {             return ConfigurationManager.AppSettings.AllKeys.FirstOrDefault(item =>                   item.Equals(appSettingName)) != null ? ConfigurationManager.AppSettings[appSettingName] : null;          } 

指定ConnecString的获取

        public string GetConnectString(string name)         {             return ConfigurationManager.ConnectionStrings[name]?.ConnectionString;             ;         } 

自定义内容的读取

  • ConfigurationSection
  • ConfigurationElement
  • ConfigurationSectionGroup
  • ConfigurationElementCollection

ConfigurationSection

表示配置文件中的节。

// 自定义一个Section    internal class MySection : ConfigurationSection     {         [ConfigurationProperty(nameof(Code))]         public string Code         {             get => base[nameof(Code)].ToString();          }     } 

需要在属性上使用ConfigurationPropertyAttribute

//调用方法       public string GetMySectionCode()         {             return (ConfigurationManager.GetSection("MySection") as MySection)?.Code;         } 

ConfigurationElement

表示Section的成员

//根据Config 配置属性     public class MyElement : ConfigurationElement     {         [ConfigurationProperty(nameof(Id))]         public string Id         {             get => this[nameof(Id)].ToString();         }     } //同时在MySection 中进行扩展     internal class MySection : ConfigurationSection     { 		...         [ConfigurationProperty(nameof(Member))]         public MyElement Member         {             get => base[nameof(Member)] as MyElement;          }         ...      } //调用方法         public string GetMySectionMember()         {             return (ConfigurationManager.GetSection("MySection") as MySection)?.Member?.Id;         } 

ConfigurationElementCollection

表示Element的集合

//定义一个MyElement 的集合     [ConfigurationCollection(typeof(MyElement))]     internal class MyElementCollection : ConfigurationElementCollection     {         protected override ConfigurationElement CreateNewElement()         {             return new MyElement();         }          protected override object GetElementKey(ConfigurationElement element)         {             return (element as MyElement).Id;         }     } //在Section 中进行填充     internal class MySection : ConfigurationSection     {         [ConfigurationProperty(nameof(Members)), ConfigurationCollection(typeof(MyElement))]         public MyElementCollection Members         {             get => base[nameof(Members)] as MyElementCollection;          }     } //调用         public int GetMySectionMembers()         {             return (int)(ConfigurationManager.GetSection("MySection") as MySection)?.Members?.Count;         } 

ConfigurationSectionGroup

在Section 外面在套一个类

    public class MyGroup : ConfigurationSectionGroup     {         [ConfigurationProperty(nameof(MySection))]         public MySection MySection { get => this.Sections[nameof(MySection)] as MySection; }     } 
// 两种调用方式都可以     public int GetMySectionMembersInGroup()         {             return (int)(ConfigurationManager.GetSection("MyGroup/MySection") as MySection)?.Members?.Count;         }         public int GetMySectionMembersInGroupByOpenConfig()         {             Configuration config = ConfigurationManager.OpenExeConfiguration(                 ConfigurationUserLevel.None);             var group = (MyGroup)config.GetSectionGroup                 ("MyGroup");             return group.MySection.Members.Count;         } 

处理不是默认名字的Config 文件

ExeConfigurationFileMap exeConfigurationFileMap = new ExeConfigurationFileMap() { ExeConfigFilename = @".App1.config" };             Configuration config = ConfigurationManager.OpenMappedExeConfiguration(exeConfigurationFileMap,                 ConfigurationUserLevel.None); 

这边加载方式与上面的不同 后续一致

github