1. 程式人生 > 實用技巧 >C# 類庫 dll 讀取配置檔案資訊

C# 類庫 dll 讀取配置檔案資訊

一:給 C# 類庫 dll 新增配置檔案並讀取配置資訊

效果:

1.給類庫程式新增配置檔案,並命名為:類庫名.DLL.config

如上面效果圖,類庫為:API.dll ,那麼其對應的類庫配置檔案為:API.DLL.config

注意:執行時config檔案需跟類庫dll在同一級目錄下,不然讀取不到檔案

給配置檔案新增相關的配置資訊

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!--Start 企業微信介面配置,預設不需要更改,企業微信屬於私有化的請修改  Start
--> <!--注意:連結必須是以'/'結尾--> <add key="Api" value="https://api.weixin.qq.com/" /> <add key="QyApi" value="https://qyapi.weixin.qq.com/" /> <add key="FileApi" value="http://file.api.weixin.qq.com/" /> <add key="ApiMch" value="https://api.mch.weixin.qq.com/" /> <!--
END 企業微信介面配置 END--> </appSettings> </configuration>
2.建立APIConfHelper.cs 類,為讀取配置資訊封裝方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
using System.Xml;
using System.Reflection;
using System.Diagnostics;
namespace API.Helpers { /// <summary> /// 支援AppSettings和ConnectionStrings節點 ,如需其他節點請自行擴充套件 /// </summary> public class APIConfHelper { //實現 AppSettings 節點的讀取 public static Hashtable AppSettings { get { return GetNameAndValue("appSettings", "key", "value"); } } /// <summary> /// 實現對AppSettings節點對應key的value設定 /// </summary> /// <param name="keyNameValue"></param> /// <param name="value"></param> public static void SetAppSettings(string keyNameValue, string value) { SetNameAndValue("appSettings", "key", keyNameValue, value); } //實現 ConnectionStrings 節點的讀取 public static Hashtable ConnectionStrings { get { return GetNameAndValue("connectionStrings", "name", "connectionString"); } } /// <summary> /// 實現對connectionStrings 節點對應name的value設定 /// </summary> /// <param name="keyNameValue"></param> /// <param name="value"></param> public static void SetConnectionStrings(string keyNameValue, string value) { SetNameAndValue("connectionStrings", "name", keyNameValue, value); } /// <summary> /// 實現對相應節點的對應節點對應key或者name對應value值的設定 /// </summary> /// <param name="sectionTag">對應節點</param> /// <param name="KeyOrName">對應key或者name</param> /// <param name="keyNameValue">key或者name的值</param> /// <param name="valueOrConnectionString">對應key或者name 的value值</param> private static void SetNameAndValue(string sectionTag, string KeyOrName, string keyNameValue, string valueOrConnectionString) { string assemblyPath = Assembly.GetExecutingAssembly().GetName().CodeBase; //獲取執行專案當然DLL的路徑 assemblyPath = assemblyPath.Remove(0, 8); //去除路徑字首 string configUrl = assemblyPath + ".config"; //新增.config字尾,得到配置檔案路徑 try { XmlDocument cfgDoc = new XmlDocument(); cfgDoc.Load(configUrl); XmlNodeList nodes = cfgDoc.GetElementsByTagName(sectionTag); foreach (XmlNode node in nodes) { foreach (XmlNode childNode in node.ChildNodes) { XmlAttributeCollection attributes = childNode.Attributes; if (attributes!=null) { if (attributes.GetNamedItem(KeyOrName).InnerText == keyNameValue) { attributes.GetNamedItem("value").InnerText = valueOrConnectionString; } } } } cfgDoc.Save(configUrl); } catch (FileNotFoundException es) { throw es; } } /// <summary> /// 根據節點名,子節點名,獲取指定值 /// </summary> /// <param name="sectionTag">對應節點</param> /// <param name="KeyOrName">key或者name</param> /// <param name="valueOrConnectionString">key或者name的值</param> /// <returns>key或者name對應value值</returns> private static Hashtable GetNameAndValue(string sectionTag, string KeyOrName, string valueOrConnectionString) { Hashtable settings = new Hashtable(5);//初始化Hashtable string assemblyPath = Assembly.GetExecutingAssembly().GetName().CodeBase;//獲取執行專案當前DLL的路徑 assemblyPath = assemblyPath.Remove(0, 8); //去除字首 string configUrl = assemblyPath + ".config"; //新增 .config 字尾,得到配置檔案路徑 XmlDocument cfgDoc = new XmlDocument(); FileStream fs = null; try { fs = new FileStream(configUrl, FileMode.Open, FileAccess.Read); cfgDoc.Load(new XmlTextReader(fs)); XmlNodeList nodes = cfgDoc.GetElementsByTagName(sectionTag); foreach (XmlNode node in nodes) { foreach (XmlNode childNode in node.ChildNodes) { XmlAttributeCollection attributes = childNode.Attributes; if (attributes!=null) {
//為null不新增 settings.Add(attributes[KeyOrName].Value, attributes[valueOrConnectionString].Value); } } } }
catch (FileNotFoundException es) { throw es; } finally { if (fs != null) { fs.Close(); } } return settings; } } }
3.呼叫方法讀取節點配置資訊
        /// <summary>
        /// 基礎URL
        /// </summary>
        private static string baseUrl = APIConfHelper.AppSettings["Api"].ToString();