【Config】类库读取自己的配置文件,配置文件的扩展
我们在项目中一般都是使用统一的项目文件配置,所有的配置和自定义的字段都写在一个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】类库读取自己的配置文件,配置文件的扩展的更多相关文章
- Asp.net Core 和类库读取配置文件信息
		
Asp.net Core 和类库读取配置文件信息 看干货请移步至.net core 读取配置文件公共类 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取 ...
 - 【c++基础】C++编写Config类读取配置文件
		
前言 系统程序一般需要读取参数文件,看到一个很好的Config类记录在此. 头文件Config.h //Config.h //re: https://blog.csdn.net/David_xtd/a ...
 - Spring读取外部的资源配置文件—@PropertySource和@Value实现资源文件配置
		
通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值: @PropertySource注解主要是让Spring的Environment接口读取属性配置文件用的,标识在@ ...
 - Setup Factory 读取安装包的配置文件
		
result = INIFile.GetValue(SessionVar.Expand("%SourceFolder%\\set.ini"), "set", & ...
 - 仿联想商城laravel实战---6、自建配置文件和缓存(如何读取自己创建的配置文件的信息)
		
仿联想商城laravel实战---6.自建配置文件和缓存(如何读取自己创建的配置文件的信息) 一.总结 一句话总结: config()及相应的方法 1.前端插件选择好了,后端开发超级省力? 比如多图上 ...
 - SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池
		
三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...
 - 无法读取例程 &ROUTINE 中配置文件选项 FND_DEVELOPER_MODE
		
问题描述:OM>发运>事务处理,进入此界面,FORM出现报错信息:无法读取例程 &ROUTINE 中配置文件选项 FND_DEVELOPER_MODE 解决办法:在系统管理员下,设 ...
 - MyBatis XML 配置文件 properties 元素扩展
		
在分析 MyBatis XML 配置文件 properties 元素时提到了三种配置方式,其中 property 子元素 和 properties 文件都比较容易理解,但是为什么还要提供一种代码参数传 ...
 - springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法
		
springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法 @SpringBootApplication public class Sen ...
 
随机推荐
- c++编译错误C2971:"std::array":array_size:包含非静态存储不能用作废类型参数;参见“std::array”的声明
			
在Qt5中这段代码编写有两种方式:一个编译成功,一个失败 成功版本: static constexpr size_t block_size = 0x2000;//8KB static constexp ...
 - Super Jumping! Jumping! Jumping! ---HDU - 1087
			
Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...
 - 04.封装ajax
			
<script> //封装ajax // 函数名 ajax // 函数的参数 // url: 请求的地址 // type: 请求的方式 get /post // data: 要上传的数据 ...
 - 手机touch事件及参数【转】(自己懒得写了,找了一篇摘过来)
			
[html5构建触屏网站]之touch事件 前言 一个触屏网站到底和传统的pc端网站有什么区别呢,交互方式的改变首当其冲.例如我们常用的click事件,在触屏设备下是如此无力. 手机上的大部分交互都是 ...
 - c# 右下角弹出窗口
			
public partial class Form2 : Form { System.Diagnostics.Stopwatch sth = new System.Diagnostics.Stopwa ...
 - Mesos源码分析(1): Mesos的启动过程总论
 - Data Center(5): 实例
			
我们来分析从外网访问内网的服务的具体过程: 首先我们看DNS和Load Balancer是怎么工作的. 客户端要访问我们的系统,发送了一个https请求,https://nova.mycompany. ...
 - 基础:新建个maven项目
			
首先在电脑上配置好Maven环境 第一步:在Eclipse中选择创建Maven Project Next Next Finish 创建好后项目结构如下: 第二步:讲项目转为Web项目,右键项目点击pr ...
 - Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放
			
一,VideoJS介绍 引用脚本,videojs很为你着想,直接cdn了,你都不需要下载这些代码放入自己的网站 <link href=”http://vjs.zencdn.net/c/video ...
 - .Net Core中Dapper的使用详解
			
Dapper 是一个轻量级ORM框架,在项目中如果对性能比较看中,Dapper是一个不错的选择.接下来我们就来看看如何在项目中使用Dapper. 1.安装Dapper 这里直接使用Nuget安装. ...