一:给 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. ERA-Interim 的变量TCW和VIWV可降水量

    可降水量(Precipitable water) 气象上有一个名词"可降水量"(Precipitable water),可以用来衡量大气的水含量. 其公式为 \(W=\frac{1 ...

  2. 【Anaconda】Jupyter 中添加 Anaconda 环境

    两种方法: 1. 安装 nb_conda_kernels,将所有 conda 环境同步至 Jupyter Notebook,参考『Jupyter notebook选择conda环境 - 简书』. 2. ...

  3. abap screen页签开发注意事项

    问题描述:我比较懒,开发程序的时候所有的页签都是直接公用主程序的按钮功能,这就导致,当我按了按钮之后,SY-UCOMM里保存的是我自建按钮的code, 如果不进行页签跳转,或者按其他按钮的话,直接按下 ...

  4. 关于sql json数据的处理

    $resultProductPrice = DB::update("update lev_product_price set detail=json_set(detail,'$.颜色','红 ...

  5. css 动画基础配置说明

    span { animation: roll 0.8s; animation-fill-mode: forwards; // 执行一次,  infinity // 执行多次 animation-tim ...

  6. spring mvc基本介绍

    1 MVC 盖帘: MVC 是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计编写 Web 应用程序表现层的模式. MVC 设计模式的三大角色: Model ...

  7. viewpager加fragment可滑动加radio跟随滑动

    public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, V ...

  8. 对于小白如何才能学好Java

    我们学习任何一种编程语言,不是去无目的的网上找太多的教程,而是首先从宏观了解它的基本思想方法定义概念,从宏观感受它的逻辑与抽象,然后是实践,不断的实践.今天我们看看网上给我们小白的一些学习建议. 一. ...

  9. java第五周学习情况

    这个星期主要是在读<大道至简>这本书,话说这本书确实还行啊.看完之后懂得了很多东西,前天写了一篇读后感,把自己的感想记了下来,以后有机会可以再看一遍.然后就是一些Java的相关知识了.也没 ...

  10. Word10 个人简历office真题

    1.新键Microsoft Word 文档,命名为Word,再打开Word文档,选择[布局],打开[页面设置]右下角的箭头,弹出[页面设置]的窗口,根据题目要求调整[页边距].   2.根据案例题目二 ...