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 ...
随机推荐
- 动态规划-3-RNA的二级结构
/*状态转移方程: OPT(i , j)= max(OPT(i , j − 1) , max( 1+OPT(i , t − 1)+OPT(t + 1, j − 1))), where the max ...
- 在windows如何下载android源码
如链接https://blog.csdn.net/freekiteyu/article/details/70939672
- 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器
package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...
- 浅谈tcp 与udp
tcp是一种面向连接的.可靠的.基于字节流的传输层通信协议.是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流. udp(用户数据报协议)是iso参考模型中一种无连接的传输层 ...
- 【剑指Offer】【树】二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 1 ...
- [node]启动一个简单的node接口
来自知乎. 需要先安装一个node,安装过程不表. 新建文件: nodeServer.js // 复制这个文件到目录,再输入一下命令: // npm i express // node nodeSer ...
- mac_office2019
mac_office2019下载 1,链接地址: mac_office2019: https://590m.com/d/28636472-44062040-dc385f (访问密码:7410) 2, ...
- pg copy用法
postgresql copy用法1,导出表数据1)导出test表数据到txt copy test to '/home/jinli/test.txt'; 2)导出test表数据到csv copy te ...
- java 图片BASE64 转字节流 byte[]
String base64Url = base64UrlArray.get(0)+"";BASE64Decoder decoder = new BASE64Decoder();re ...
- mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...