• 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();
  • 相关阅读:
    SendInput模拟键盘输入的问题 <转>
    tinyMce3.21 使用随笔
    ORM的一些思考
    VS2008 , 1330 , 数字签名错误.
    .Net Reflector 工具 过期后使用小工具。
    就当是一个新的设计模式!
    OpenSUSE 11 下 Mono 2 开发笔记。
    转:)CNBlogs引用第三方组(控)件明细^_^
    DBLinq ,没实现 Log !
    DotNet 的一些知识点
  • 原文地址:https://www.cnblogs.com/JioNote/p/13677672.html
Copyright © 2020-2023  润新知