ConfigurationManager姿势快闪
C# ConfigurationManager使用记录
最近一个祖传代码是使用.NET Fx写就的,我在使用控制台程序获取配置时有些折腾。
下面记录一些管理配置文件的姿势:
ConfigurationManager
用于在客户机应用程序中获取配置信息;
对于web项目,请使用WebConfigurationManager
类。
ConfigurationManager使用姿势
- 添加app.config文件
<configuration>
<appSettings>
<add key="ProjectName" value="cvg.java.api.productcenter" />
</appSettings>
<connectionStrings>
<add name="DBConnection" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WingtipToys;Integrated Security=True;Pooling=False"/>
</connectionStrings>
</configuration>
- 注意:编译之后app.config配置节会进入可执行文件的配置文件
Demo.exe.config
ConfigurationManager.AppSettings["key1"]
、
ConfigurationManager.ConnectionStrings["DBConnection"]
用于从应用的默认配置中获取程序配置、连接字符串配置, 这也是ConfigurationManager最常规的用法。
- 如何读取外部配置?
将所有配置信息放在一个配置文件显得非常混乱,特别是[密码管理]的时候, 可能会划分多个配置文件。
ConfigurationManager支持项目中创建另外的配置文件。
------ app.config文件-----
<configuration>
<connectionStrings configSource="DBConnectionStrings.config" />
</configuration>
----- DBConnectionString.config文件, 这里已经不需要configuration顶级配置节----
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
<add name="DBConnection" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WingtipToys;Integrated Security=True;Pooling=False" />
</connectionStrings>
附加的这个文件不会进Demo.exe.config文件,可以想象到,当需要隐藏该文件配置,可以不把该文件加入代码管理。
- ConfigurationManager支持Machine,User,Exe三个级别的配置文件, 可以通过
ExeConfigurationFileMap
加载特定位置的配置文件。
var configFileMap = new ExeConfigurationFileMap()
{
ExeConfigFilename = @"E:\Test\WpfApp2\bin\Debug\PositionConfig.config"
};
var v = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
我们顺便看下微软是如何编写工具库文件,ConfigurationManager 是一个静态类,静态构造函数,
在使用静态方法 AppSettings["key1"]索引配置时,必须先确保配置文件已经就绪,注意下面的PrepareConfigSystem
==>EnsureConfigurationSystem
方法
public static object GetSection(string sectionName)
{
if (string.IsNullOrEmpty(sectionName))
{
return null;
}
PrepareConfigSystem();
return s_configSystem.GetSection(sectionName);
}
private static void PrepareConfigSystem()
{
if (s_initState < InitState.Usable)
{
EnsureConfigurationSystem();
}
if (s_initError != null)
{
throw s_initError;
}
}
使用了一个状态字段来表征初始化过程, 注意这里使用了一个lock
防止并发下被多次初始化
private static void EnsureConfigurationSystem() {
// If a configuration system has not yet been set,
// create the DefaultConfigurationSystem for exe's.
lock (s_initLock) {
if (s_initState < InitState.Usable) {
s_initState = InitState.Started;
try {
try {
s_configSystem = new ClientConfigurationSystem();
s_initState = InitState.Usable;
}
catch (Exception e) {
s_initError = new ConfigurationErrorsException(SR.GetString(SR.Config_client_config_init_error), e);
throw s_initError;
}
}
catch {
s_initState = InitState.Completed;
throw;
}
}
}
}
本文算是简短的技术快闪,记录了ConfigurationManager 的使用姿势和微软工具库的一般开发模式。
,
ConfigurationManager姿势快闪的更多相关文章
- 资源推荐:PPT快闪资源合集附配套字体下载
样例ppt下载 搜索公众号“拒收”或扫码关注公众号 回复关键字“快闪ppt”获取全部福利 本公众号只出精品,拒收劣质 或者点击菜单链接获取获取全部资源
- ppt怎么制作抖音快手快闪效果的倒计时动画?
ppt怎么制作快闪效果的倒计时动画? 1.首先,我们新建一个ppt,如下图: 2.然后我们在ppt中插入一个文本,文本内容为3,如下图: 3.然后我们将我们的文本设置为“Arial Black”,如下 ...
- 大前端快闪:package.json文件知多少?
最近在公司某项目参与了一些前端工作,作为后端抠脚大汉,改点前端细节磕磕绊绊,改点大前端.工程化.HTTP交互倒也还能做到柳暗花明. 于是打算用后端程序猿的视角记录一些{大前端}的知识快闪,也算是帮助读 ...
- 大前端快闪二:react开发模式 一键启动多个服务
最近全权负责了一个前后端分离的web项目,前端使用create-react-app, 后端使用golang做的api服务. npx create-react-app my-app cd my-app ...
- 前端快闪三:多环境灵活配置react
你已经使用Create React App脚手架搭建了React应用,现在该部署了. 一般会使用npm run build或者yarn build构建出静态资源, 由web服务器承载. 您会体验到 多 ...
- 92套AE抖音快闪模板(精品)
包含很多场景和类型,直接用即可,下载地址:百度网盘,https://pan.baidu.com/s/1bRFql1zFWyfpTAwa6MhuPA 内容截图:
- 一个有意思的自我介绍PPT快闪
模版来源:http://ppt.dede58.com/peixunyanjiang/27066.html
- 前端快闪四: 拦截axios请求和响应
马甲哥继续在同程艺龙写一点大前端: 今天我们来了解一下 如何拦截axios请求/响应? axios是一个基于 promise 的网络请求库,可以用于浏览器和 node.js, promise 类似于C ...
- 从一个舒服的姿势插入 HttpClient 拦截器技能点
马甲哥继续写一点大前端,阅读耗时5 minute,行文耗时5 Days 今天我们来了解一下如何拦截axios请求/响应? 这次我们举一反三,用一个最舒适的姿势插入这个技能点. axios是一个基于 p ...
随机推荐
- EL表达式详解(常用表达式以及取值)
EL表达式 学习总结 一. El表达式概念 二. El中的表达式 1. 算术表达式 2. 比较表达式 3. 逻辑表达式 4. 三元表达式 5. 判空表达式 三.EL 从四个作用域中取值 1. 概念 2 ...
- 用Java编写的猜拳小游戏
学习目标: 熟练掌握各种循环语句 例题: 代码如下: // 综合案例分析,猜拳案例 // isContinue为是否开始游戏时你所输入的值 char isContinue; //y为开始,n为借宿 S ...
- JS判断数组中的对象的每一个值不能为空
方法一:使用every()函数,此函数不怎么常用,想要了解更多请自查 //表格 evaluateData为表格的数据 <el-table id="out-table3" :d ...
- python并发——生产者消费者信号量实现
介绍 写扫描器的时候,需要让资产扫描结果一出来(生产者),另外一边就会开个线程去运行漏洞扫描(消费者). 但是又不能让结果没出来,另外一边消费者就开始干活了. 代码 # *coding:UTF-8 * ...
- 在线操作word和在线预览查找的资料记录
在线操作word和在线预览查找的资料记录 在线操作word查找的资料记录 富文本操作 http://fex.baidu.com/ueditor/ 控件类 通过 js 调用控件操作 word 文档 1. ...
- Git原理学习记录
Git原理学习记录 1.git init git-test git init 实际上就是在特定的目录下创建对应的目录和文件 2.object $ echo "V1" > ...
- uniapp-scroll-view纵向(竖向)滑动当scrollTop为0时卡顿问题
这个问题目前遇到的人少,所以找到答案不容易,我也是各种细节亲测才发现的解决方案.记录下来 当uniapp用scroll-view竖向滚动时,在scrollTop为0时,下拉会卡顿. 解决方法(只需要在 ...
- Java实现平滑加权轮询算法--降权和提权
上一篇讲了普通轮询.加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在文末留下了悬念:节点出现分配失败时降低有效权重值:成功时提高有效权重值(但不能大于weight值). 本文在平滑加权轮询算法的 ...
- Vim 中进行文本替换
Vim 中进行文本替换 格式 用法 :[range]s/from/to/[flags] tips: [] 表示该内容可选 参数 from 需要替换的字符串(可以是正则表达式) to 替换后的字符串 r ...
- LCA的离线快速求法
最常见的LCA(树上公共祖先)都是在线算法,往往带了一个log.有一种办法是转化为"+-1最值问题"得到O(n)+O(1)的复杂度,但是原理复杂,常数大.今天介绍一种允许离线时接近 ...