C#类库DLL配置⽂件
C#类库DLL配置⽂件
在.NET⾥⾯,类库项⽬是没有相应的配置⽂件的,但有时候写⼀些公共的类库DLL,⼜希望有配置⽂件来进⾏配置,以适应需求变化。还是⽼话,微软既然不提供,咱⾃⼰来写个吧。在类库项⽬中创建ConfigurationManager类.使⽤.NET framework 4.0,在
web,windows,window service 中均进⾏过测试。使⽤时需将配置⽂件命名为 dll名字.config 并放置在引⽤类库DLL项⽬的debug或者release ⽂件夹下。
SetConnectionStrings(string keyNameValue, string value)        {            SetNameAndValue("connectionStrings",
应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)
param name{                        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;        }    }}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。