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();
C# 类库 dll 读取配置文件信息的更多相关文章
- .NET Core类库中读取配置文件
最近在开发基于.NET Core的NuGet包,遇到一个问题:.NET Core中已经没有ConfigurationManager类,在类库中无法像.NET Framework那样读取App.conf ...
- Asp.net Core 和类库读取配置文件信息
Asp.net Core 和类库读取配置文件信息 看干货请移步至.net core 读取配置文件公共类 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取 ...
- ASP.NET Core实现类库项目读取配置文件
前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...
- .NET Core在类库中读取配置文件appsettings.json
在.NET Framework框架时代我们的应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别 ...
- ConfigParser_读取配置文件信息
ConfigParse简介 ConfigParser 在python中是用来解析配置文件的内置模块,直接导入使用 import configparser 使用该模块可以对配置文件进行增.读.改.删操作 ...
- 在java中读取配置文件信息
public class PropertyUtil { public static final Properties PROP = new Properties(); /** * 读取配置文件的内容( ...
- spring配置:context:property-placeholder 读取配置文件信息 在配置文件中使用el表达式填充值
spring将properties文件读取后在配置文件中直接将对象的配置信息填充到bean中的变量里. 原本使用PropertyPlaceholderConfigurer类进行文件信息配置.Prope ...
- asp.net core 2.0类库项目读取配置文件
1.首先在类库项目中添加 这3个库. 2.在类库项目中添加AppSetting.cs.代码如下: using Microsoft.Extensions.Configuration;using Syst ...
- spring boot 读取配置文件信息
1.读取application.properties @Component @ConfigurationProperties(prefix="images.product.column&qu ...
- SpringBoot | 读取配置文件信息
server.port=8081 #修改端口号 server.servlet.context-path= /SpringBoot #修改URL #自定义配置 tz.name = xiaoming tz ...
随机推荐
- 基于ipset的dns代理
###基于源IP的dns白名单 sleep 60s/etc/init.d/firewall restart ###创建ipset集合 命名为src_dns_whitelist#清空原有命名为src_d ...
- 微信小程序-通过绑定事件进行传值
一.数据绑定: <view bindtap="node" data-num="5"> 点击传值:{{nums}} </view> dat ...
- Zookeeper ZAB协议
这篇博客是从源码的角度了解Zookeeper 从接收客户端请求开始,到返回数据为止,有很多涉及到的对象创建因为在前几篇文章已经说明过了,这里就不再重复的说明了,如果不是很明白的的,可以先看前几篇博文了 ...
- jeecgboot <j-popup
<a-col :span="24"> <a-form-item label=" 规格" :labelCol="labelCol&qu ...
- lxml库和BeautifulSoup库常用点小结
算是本人的学习笔记吧,仅供个人学习使用. 以下内容摘自<Python3网络爬虫开发实战--崔庆才著> 1.lxml库 XPath 常用规则: 表达式 描述 nodename 选取此节点的所 ...
- hierarchical-clustering
https://ww2.mathworks.cn/help/stats/hierarchical-clustering.html https://ww2.mathworks.cn/help/stats ...
- 关于 verilator 中 config.vlt 等配置文件的使用
参考网页:https://verilator.org/guide/latest/exe_verilator.html#configuration-files 注意,在使用 config.vlt 配置文 ...
- dialog弹窗里生成二维码 (reading qppendChild)
在dialog弹窗里生成二维码第一次点击时 dialogFormVisible.value=false,二维码生成时会找不到对象可以用nextTick()函数 将二维码生成代码放到nextTick() ...
- Java流程控制之while循环详解
while循环 while循环 do...while循环 for循环 在Java5中引入了一种主要用于数组的增强型for循环 while循环 while循环是最基本的循环,它的结构为 while(布尔 ...
- py打包工具
库地址: auto-py-to-exe https://pypi.org/project/auto-py-to-exe/ Gooey https://pypi.org/project/Gooey/ 为 ...