我们在项目中一般都是使用统一的项目文件配置,所有的配置和自定义的字段都写在一个web.config或者App.config文件中。一般平时我们也没有发现问题,确实这么写没有问题,但是就是如果写的多了就看着很臃肿。

并且假如你其他地方不是主项目的配置也写在这里,多了是不是很乱,有时候自己都不知道这个是配置的那个东西了。这不我在搭建自己的框架做日志写入的时候就发现这个问题,我就想因为我日志写入我是单独作为类库存在的,所以我不一定非要写在web.config中啊。我直接写在我类库下的配置文件就可以啊。想法不错说干就干,经过一下午的鼓捣吧(其实也弄别的拉。)终于封装成了一个方法其实很简单,主要是老是报路径错误鼓捣的时间。原本我是想用程序集的路径(Assembly.Location或者assembly.CodeBase)不过研究半天发现他们给的路径都不好使,也不知道为什么(回头再研究先解决眼下的问题)。反正是一个给返回C盘的路径一个是有多于字段。最后我还是用AppDomain这个代替吧,先用着发现不行在撤。嘻嘻嘻

最后大概就是这么一个结构:

类就是config的帮助扩展类,然后读取到的就是当前下的app.config。

获取当前类库的文件配置

方法代码:

   #region 1.获取当前类库的文件配置
public static Configuration InitLogConfig()
{
string baesePath = AppDomain.CurrentDomain.RelativeSearchPath;
string fullName = Path.GetFileName(Assembly.GetCallingAssembly().Location);
string path = string.Format(@"{0}\{1}.config", baesePath, fullName);
if (File.Exists(path) == false)
{
string msg = string.Format("{0}路径下的文件未找到 ", path);
throw new FileNotFoundException(msg);
}
try
{
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = path;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None);
return config;
}
catch (Exception ex) { throw new Exception(ex.Message);
}
}
#endregion

config我现在就随便写了一个 appSettings来给大家演示一下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="LogPath" value="E:\"/>
</appSettings>
</configuration>

下面就是为了演示写的调用:

然后是运行结果:我们可以看到配置文件是E盘,所有我们读取到的路径也是E盘

走到这里就说明方法成功了。我很开心哈哈。想法实现了。

注意:这个扩展是那个方法调用所在的项目或者类库的配置文件不是不变的。

获取当前指定位置文件配置

写完这个之后我又想到一个想法那就是指定读取项目中类库的配置文件,有了第一个的基础,这个还不是手到擒来。所有代码就改成这样了:

  #region 2.获取当前指定位置文件配置
public static Configuration InitLogConfig2(string fullName)
{
string baesePath = AppDomain.CurrentDomain.RelativeSearchPath; string path = string.Format(@"{0}\{1}.dll.config", baesePath, fullName);
if (File.Exists(path) == false)
{
string msg = string.Format("{0}路径下的文件未找到 ", path);
throw new FileNotFoundException(msg);
}
try
{
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = path;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None);
return config;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
} }

为了演示我就这样子写一下吧,不演示一下在不明白区别:

运行起来效果:

可以看到一个是类库的E盘一个是我主文件写的D盘,说明成功了。

【Config】类库读取自己的配置文件,配置文件的扩展的更多相关文章

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

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

  2. 【c++基础】C++编写Config类读取配置文件

    前言 系统程序一般需要读取参数文件,看到一个很好的Config类记录在此. 头文件Config.h //Config.h //re: https://blog.csdn.net/David_xtd/a ...

  3. Spring读取外部的资源配置文件—@PropertySource和@Value实现资源文件配置

    通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值: @PropertySource注解主要是让Spring的Environment接口读取属性配置文件用的,标识在@ ...

  4. Setup Factory 读取安装包的配置文件

    result = INIFile.GetValue(SessionVar.Expand("%SourceFolder%\\set.ini"), "set", & ...

  5. 仿联想商城laravel实战---6、自建配置文件和缓存(如何读取自己创建的配置文件的信息)

    仿联想商城laravel实战---6.自建配置文件和缓存(如何读取自己创建的配置文件的信息) 一.总结 一句话总结: config()及相应的方法 1.前端插件选择好了,后端开发超级省力? 比如多图上 ...

  6. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  7. 无法读取例程 &ROUTINE 中配置文件选项 FND_DEVELOPER_MODE

    问题描述:OM>发运>事务处理,进入此界面,FORM出现报错信息:无法读取例程 &ROUTINE 中配置文件选项 FND_DEVELOPER_MODE 解决办法:在系统管理员下,设 ...

  8. MyBatis XML 配置文件 properties 元素扩展

    在分析 MyBatis XML 配置文件 properties 元素时提到了三种配置方式,其中 property 子元素 和 properties 文件都比较容易理解,但是为什么还要提供一种代码参数传 ...

  9. springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法

    springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法 @SpringBootApplication public class Sen ...

随机推荐

  1. jq 点击复制div里面的内容 如果粘贴到富文本中,会将样式,里面所有的标签,文字一并粘贴进去

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Oracle分析函数——函数列表

    --------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...

  3. ASP.NET Core应用的错误处理[4]:StatusCodePagesMiddleware中间件如何针对响应码呈现错误页面

    StatusCodePagesMiddleware中间件与ExceptionHandlerMiddleware中间件比较类似,它们都是在后续请求处理过程中“出错”的情况下利用一个错误处理器来完成最终的 ...

  4. emWin实现ATM机界面设计,含uCOS-III和FreeRTOS两个版本

    第1期:ATM机配套例子:V6-900_STemWin提高篇实验_ATM机(uCOS-III)V6-901_STemWin提高篇实验_ATM机(FreeRTOS) 例程下载地址:http://foru ...

  5. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  6. macOS 10.14虚拟机安装教程

    windows10下安装vmware14.0以及macOS 10.14图文详解 工具/原料   windows10 vmware 14.0 macOS 10.14懒人版 mac补丁unlocker工具 ...

  7. [Swift]LeetCode5. 最长回文子串 | Longest Palindromic Substring

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  8. [Swift]LeetCode79. 单词搜索 | Word Search

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

  9. [Swift]LeetCode234. 回文链表 | Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  10. [Swift]LeetCode314. 二叉树的竖直遍历 $ Binary Tree Vertical Order Traversal

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...