C#类库DLL配置文件
在.NET里面,类库项目是没有相应的配置文件的,但有时候写一些公共的类库DLL,又希望有配置文件来进行配置,以适应需求变化。还是老话,微软既然不提供,咱自己来写个吧。在类库项目中创建ConfigurationManager类.使用.NET framework 4.0,在web,windows,window service 中均进行过测试。使用时需将配置文件命名为 dll名字.config 并放置在引用类库DLL项目的debug或者release文件夹下。
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 LoadGpsDataComponet{ /// <summary> /// Author:qingliangwu /// Email:wuqingliangwork@163.com /// CreateTime:2010-11-25 /// ClassFunction:此类用来提供对DLL配置文件的读写操作,目前只支持AppSettings和ConnectionStrings节点 /// </summary> public class ConfigurationManager { //实现 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.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; settings.Add(attributes[KeyOrName].Value, attributes[valueOrConnectionString].Value); } } } catch (FileNotFoundException es) { throw es; } finally { if (fs != null) { fs.Close(); } } return settings; } }}
引用请说明出处