1. <dd id="erndk"></dd>
                1. C#自定義配置文件(一)

                  互聯網 2022/5/1 12:42:46

                  C#自定義配置文件.NET程序中,經常使用Config文件來配置應用程序中經常使用的值,比如數據庫連接字符串。最近項目遇到一個需要配置好多節點在配置文件中的需求。為了使配置節點整潔易維護,在代碼調用時也保證獲取時比較直觀,結合自定義配置文件專門整理了一個配置文件幫…

                  C#自定義配置文件

                  .NET程序中,經常使用Config文件來配置應用程序中經常使用的值,比如數據庫連接字符串。最近項目遇到一個需要配置好多節點在配置文件中的需求。為了使配置節點整潔易維護,在代碼調用時也保證獲取時比較直觀,結合自定義配置文件專門整理了一個配置文件幫助類Demo。此篇文章主要講述自定義配置文件的使用方法。


                  常見配置文件使用方法

                  • 直接在connectionStrings\appSettings這兩個節點中添加add節點配置
                    • 這種方式在項目中很常見,使用簡單,這里不做介紹
                  • 文件操作
                    • 很多程序中(自己公司老項目),通過獲取指定路徑下XML\ini\json\txt等文件,通過IO獲取文件內容并對文件進行解析,從而獲取程序需要的配置信息(不推薦)

                  自定義配置文件

                  在App.Config(web.config)中指定其他配置文件的路徑和節點。
                  在configSections節點下配置section節點,.NET提供自帶的類型進行封裝。(NameValue鍵值對、Dictionary字典、SingTag基礎結構)。Section節點的name屬性是自定義節點的名稱,type是接收信息的數據類型。
                  注意!configSections節點必須為configuration下第一個節點

                  configSectionsname屬性為自定義配置節點的名稱,type 為轉換的類型

                  ConfigurationManager.GetSection("name") 方法的參數是自定義配置文件節點的名稱

                  NameValue鍵值對

                  配置語法格式:

                  <?xml version="1.0" encoding="utf-8" ?>
                  <configuration>
                  	<configSections>
                  		<!--以NameValueCollection鍵值對的形式返回配置節點中的信息,type值固定為System.Configuration.NameValueSectionHandler-->
                  		<section name="NameValueConfigNode" type="System.Configuration.NameValueSectionHandler"/>
                  	</configSections>
                  	<!--自定義配置節點-->
                  	<NameValueConfigNode>
                  		<add key="Name一" value="Value一" />
                  		<add key="Name二" value="Value二" />
                  		<add key="Name三" value="Value三" />
                  	</NameValueConfigNode>
                      <startup> 
                          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
                      </startup>
                  </configuration>
                  

                  調用方法:這里以一個靜態屬性的方法獲取并返回Dictionary格式(后面幾種方法也采用這個方式)

                  /// <summary>
                  /// NameValueCollection
                  /// </summary>
                  public static Dictionary<string, string> NameValueConfigNode
                  {
                      get
                      {
                          NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("NameValueConfigNode");
                          Dictionary<string, string> result = new Dictionary<string,string>();
                           foreach (string key in nvc.AllKeys)
                          { 
                              result.Add(key, nvc[key]);
                          }
                          return result;
                      }
                  }
                  

                  Dictionary

                  配置文件語法格式:

                  <?xml version="1.0" encoding="utf-8" ?>
                  <configuration>
                  	<configSections>
                  		<!--以Dictionary字典的形式返回配置節點中的信息,type固定為System.Configuration.DictionarySectionHandler-->
                  		<section name="DictionaryConfigNode" type="System.Configuration.DictionarySectionHandler"/>
                  	</configSections>
                  	<!--自定義配置節點-->
                  	<DictionaryConfigNode>
                  		<add key="Key一" value="DictValue一" />
                  		<add key="Key二" value="DictValue二" />
                  		<add key="Key三" value="DictValue三" />
                  	</DictionaryConfigNode>
                      <startup> 
                          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
                      </startup>
                  </configuration>
                  

                  調用方法:

                  /// <summary>
                  /// Dictionary
                  /// </summary>
                  public static Dictionary<string, string> DictionaryConfigNode
                  {
                      get
                      {
                          IDictionary dict = (IDictionary)ConfigurationManager.GetSection("DictionaryConfigNode");
                          Dictionary<string, string> result = new Dictionary<string, string>();
                          foreach (string key in dict.Keys)
                          {
                              result.Add(key, dict[key].ToString());
                          }
                          return result;
                      }
                  }
                  

                  SingTag

                  配置文件語法格式:

                  <?xml version="1.0" encoding="utf-8" ?>
                  <configuration>
                  	<configSections>
                  		<!--基礎結構處理 .config 文件中由單個 XML 標記所表示的各配置節點中的值,type固定為System.Configuration.SingleTagSectionHandler-->
                  		<section name="SingleTagConfigNode" type="System.Configuration.SingleTagSectionHandler" />
                  	</configSections>
                  	<!--自定義配置節點-->
                  	<!--注意,只能是單個節SingleTagSectionHandler才能處理,無論有多少個屬性都能處理-->
                  	<SingleTagConfigNode PropertyOne="1" PropertyTwo="2" PropertyThree="3" PropertyFour="4" PropertyFive="5" />
                      <startup> 
                          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
                      </startup>
                  </configuration>
                  

                  調用方法:

                  /// <summary>
                  /// SingleTag
                  /// </summary>
                  public static Dictionary<string, string> SingleTagConfigNode
                  {
                      get
                      {
                          Hashtable dict = (Hashtable)ConfigurationManager.GetSection("SingleTagConfigNode");
                          Dictionary<string, string> result = new Dictionary<string, string>();
                          foreach (string key in dict.Keys)
                          {
                              result.Add(key, dict[key].ToString());
                          }
                          return result;
                      }
                  }
                  

                  以上程序通過控制臺應用程序測試調用效果如下:

                  Lsbv5T.png

                  自定義配置文件

                  以上三種方法,只能讀取應用程序的Web.config或者app.config中的配置信息,但是在大多數項目中,業務場景復雜,配置信息更是多到看不過來,所以如果都寫在web.config或者app.config中的話,不太美觀,也不易維護。

                  那么有沒有一種方法,可以根據需要,配置一個或者多個的config,并且在程序中直接調用使用的方法? (問就是有^_^)

                  下面舉例一種自定義配置文件的寫法
                  配置文件寫法:
                  <configSections>節點下<section>的屬性值內容與上面三個方法相同。需要注意的是自定義節點,自定義節點只需要設置configSource屬性即可,屬性值指向自定義配置文件的路徑;
                  注意:路徑必須要寫成相對路徑。

                  <?xml version="1.0" encoding="utf-8" ?>
                  <configuration>
                  	<configSections>
                  		<!--把MyConfigData節點的數據映射到MyConfigData類中-->
                  		<section name="MyConfigData" type="ConsoleApplication.ConfigFiles.ConfigFile,ConsoleApplication"/>
                  	</configSections>
                  	<!--自定義配置節點,configSource指定自定義配置文件的路徑(必須是相對路徑)-->
                  	<MyConfigData configSource="ConfigFiles\Framework.config"/>
                      <startup> 
                          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
                      </startup>
                  </configuration>
                  
                  

                  這是自定義的文件內容,

                  <?xml version="1.0" encoding="utf-8" ?>
                  <MyConfigData>
                  	<add key="Key一" value="自定義文件一" />
                  	<add key="Key二" value="自定義文件二" />
                  	<add key="Key三" value="自定義文件三" />
                  </MyConfigData>
                  

                  程序中的調用方法與上面的方式一致,這種自定義配置文件的精髓在于,不用將所有配置信息都擠在一個文件中,而是根據項目需要合理的分成多個配置,只需要在web.config或者app.config中指定文件路徑即可。其他使用方法沒有差別

                  自定義結構配置文件

                  以上方法為常用的基本配置文件的使用方法,都是使用C#提供的類型進行獲取,配置文件的節點需要按照對應格式設置,C#中還有一種可以自定義配置文件格式的調用方法,Config中科自定義節點的結構,然后在程序中需要自定義一個配置文件的類,用于接收自定義配置文件的內容;
                  其中使用到的類型:
                  ConfigurationSection、ConfigurationElementCollection、ConfigurationElement、ConfigurationProperty
                  上面介紹的幾種方法基本上已經足夠日常使用,此篇文章不在進行介紹自定義格式的寫法,后期會根據個人情況(是否懶惰的情況),可能會補充此部分功能,有興趣可以去了解一下。

                  寫在最后

                  以上源代碼已經放在Gitee上,可自行下載,
                  https://gitee.com/yang-yong-666/csharp
                  該項目還包含其他關于C#的幫助類,并且會持續更新!


                  個人交流QQ:1695690324
                  原創不易,轉載請注明出處
                  博客園:https://www.cnblogs.com/yangyongdashen-S/
                  CSDN:https://blog.csdn.net/weixin_44312699?spm=1010.2135.3001.5343
                  Gitee:https://gitee.com/yang-yong-666
                  公眾號:yi人夕岸

                  隨時隨地學軟件編程-關注百度小程序和微信小程序
                  關于找一找教程網

                  本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
                  本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
                  [C#自定義配置文件(一)]http://www.yachtsalesaustralia.com/tech/detail-318480.html

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  掃一掃關注最新編程教程
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>