一:给 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 读取配置文件信息的更多相关文章

  1. .NET Core类库中读取配置文件

    最近在开发基于.NET Core的NuGet包,遇到一个问题:.NET Core中已经没有ConfigurationManager类,在类库中无法像.NET Framework那样读取App.conf ...

  2. Asp.net Core 和类库读取配置文件信息

    Asp.net Core 和类库读取配置文件信息 看干货请移步至.net core 读取配置文件公共类 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取 ...

  3. ASP.NET Core实现类库项目读取配置文件

    前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...

  4. .NET Core在类库中读取配置文件appsettings.json

    在.NET Framework框架时代我们的应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别 ...

  5. ConfigParser_读取配置文件信息

    ConfigParse简介 ConfigParser 在python中是用来解析配置文件的内置模块,直接导入使用 import configparser 使用该模块可以对配置文件进行增.读.改.删操作 ...

  6. 在java中读取配置文件信息

    public class PropertyUtil { public static final Properties PROP = new Properties(); /** * 读取配置文件的内容( ...

  7. spring配置:context:property-placeholder 读取配置文件信息 在配置文件中使用el表达式填充值

    spring将properties文件读取后在配置文件中直接将对象的配置信息填充到bean中的变量里. 原本使用PropertyPlaceholderConfigurer类进行文件信息配置.Prope ...

  8. asp.net core 2.0类库项目读取配置文件

    1.首先在类库项目中添加 这3个库. 2.在类库项目中添加AppSetting.cs.代码如下: using Microsoft.Extensions.Configuration;using Syst ...

  9. spring boot 读取配置文件信息

    1.读取application.properties @Component @ConfigurationProperties(prefix="images.product.column&qu ...

  10. SpringBoot | 读取配置文件信息

    server.port=8081 #修改端口号 server.servlet.context-path= /SpringBoot #修改URL #自定义配置 tz.name = xiaoming tz ...

随机推荐

  1. BIP change数据改变前的事件

    viewModel .get("certMaterialClass_name") .on("beforeValueChange", function (data ...

  2. zookeeper 选举流程源码解析

    在开始之前,我们先了解一下zookeeper集群角色,zookeeper中存在leader,follower, observer这么几个角色, leader, follower, 就类似与mysql ...

  3. luna lunatic

    Luna是罗马神话的月神.英语中Lunacy.Lunatic等意指疯狂的字语源均来自Luna.月亮的阴晴圆缺影响地球的潮汐涨退甚至生物周期,故此古时的人们相信月亮拥有使人疯狂的魔力,人狼等传说亦是因此 ...

  4. abap sql中进行除法操作

    在abap 得sql中进行除法操作要用division,不能用 " / "这个符号 SELECT vbeln, 100 * CAST( 10 + DIVISION( ZMENG, ...

  5. CF1786E题解

    容易为本题的弱化版CF1786C想出一个贪心: #include<bits/stdc++.h> using namespace std; #define int long long int ...

  6. 备份是个好习惯 bugku

      题目描述: 解题思路: 1.查看网页源码只显示一行字符,有点像16进制,但经过解码并不是,也不是base64等编码 2.根据题目,应该和备份相关,默认页面一般都是 index.php或者index ...

  7. hadoop单机测试环境安装(简)

    1.下载hadoop官网就可以下载.可以直接搜hadoop  ,  其实可以直接查看官网的版主文档搭建https://hadoop.apache.org/docs/stable/hadoop-proj ...

  8. 关于C#高阶知识捡漏

    高手掠过!仅仅是整理一下 自动属性:  C#自动属性可以避免原来这样我们手工声明一个私有成员变量以及编写get/set逻辑 代码如下 //Demo: public class User { publi ...

  9. 07 从RDD创建DataFrame

    1.pandas df 与 spark df的相互转换 df_s=spark.createDataFrame(df_p) df_p=df_s.toPandas() 2. Spark与Pandas中Da ...

  10. .netcore 以widnows服务方式运行

    应用需要 Microsoft.AspNetCore.Hosting.WindowsServices 的包引用. 生成主机时会调用 IHostBuilder.UseWindowsService. 若应用 ...