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 ...
随机推荐
- fpga always赋值
- Java期末课程设计--购物车的GUI(编辑中)
实现的功能 基本功能 使用admin登录 对商品表内的商品添加至购物车 结算价格 扩展功能 用户的登录注册(基于数据库) 钱包功能 结算前录入地址信息 丰富GUI(指插入图片) 管理员界面(对商品进行 ...
- MacOS系统下selenium之火狐浏览器驱动firefoxdriver安装
https://blog.csdn.net/weixin_44107321/article/details/106452468
- MulVAL攻击图的推理规则
MulVAL ( multihost, multistage, vulnerability analysis) 是由普林斯顿大学的 Ou 等开发的 Linux 平台开源攻击图生成工具,基于 Nessu ...
- 安装labelme的流程
- 高德地图poi关键字搜索-vue+ant-design
最近有个需求,需要输入上车点,下车点,然后输入上车点的时候还要在下方显示地图附近的车辆.百度了一波之后,完全莫得头绪,很多代码也都用不了,即便改了之后也不怎么生效.我用的是jeecg-boot.最后静 ...
- RestTemplate 连接池最大链接数
原文链接:https://www.cnblogs.com/x-x-736880382/p/11591906.html 以前我们项目都是基于Apache HttpClient 连接池进行web 接口调用 ...
- apk反编译工具--dex2jar
dex2jar 2.1 https://github.com/pxb1988/dex2jar/releases 链接: https://pan.baidu.com/s/1ZU16mPE_QNhzWxF ...
- HttpClient psot和get请求
private String backAllUserInfo(String uid) throws IOException { //this.setInterfaceurl("/idm/js ...
- Git 初始命令行
命令行指令 Git 全局设置 git config --global user.name "Administrator" git config --global user.emai ...