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 ...
- 闪存中的NorFlash、NandFlash及eMMC三者的区别【转】
本文转载自:https://blog.csdn.net/Blazar/article/details/77843655 快闪存储器(英语:Flash Memory),是一种电子式可清除程序化只读存储器 ...
随机推荐
- 转:SVN服务器搭建和使用(三)
http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html 接下来,试试用TortoiseSVN修改文件,添加文件,删除文件, ...
- study
1.perf, top, vtune, /sys/kernel/debug/mid_pmu_states使用 2.cpu hotplug 3.camera record时有可能耗电的地方: 硬件加速是 ...
- 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
原文:挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自 ...
- Java基金会——JUnit
JUnit 測试的重要性毋庸质疑.但怎样使測试更加准确和全面.而且独立于项目之外而且避免硬编码,JUnit给了我们一个非常好的解决方式. 能够说JUnit是为单元測试而生的,一个Java语言的单元測试 ...
- Ubuntu 14.04 使用MyEclipse 10.7 闪退解决
http://www.linuxidc.com/Linux/2014-05/101750.htm
- dm642的中断定时器
TIMER_Handle TimerHandle0; void timer1() { ////////////定时器/////////////////////// TimerHandle0 = TI ...
- 消除点击连接或者按钮或者执行onclick事件时出现的边框
css中添加 *:not(input) { font-family: sans-serif; font-size-adjust: none; -webkit-user-select: none; -w ...
- 怎么在Eclipse上运行静态网页
1. 前言 习惯用Eclipse开发动态网站,现在有一个静态网页(只有Html,Js,CSS代码,无后台Java代码)想跑一下,自己通过网上查询然后自己也研究捣鼓了一下,发现有三种方式可以发布静态网页 ...
- docker内程序如何读取dockerfile和compose.yml中设置的环境变量
docker内程序如何读取dockerfile和compose.yml中设置的环境变量 背景 compose文件中配置了服务A和服务B,其中B服务调用了A服务的接口,那么B的实现代码中该如何调用A的服 ...
- F#周报2018年第50期
新闻 Bolero: 用于WebAssembly的F#工具 Ionide-fsharp安装数量超过10万 WPF的Xaml.Behaviors类库开源 Visual Studio 2019预览版 .N ...

![P5482 [jloi2011] inequality system, cckk](/img/c7/e6cb7e6fc5f626df2d1ec8952bd19e.jpg)





![[buuctf.reverse] 115_[RCTF2019]DontEatMe](/img/52/00a29906ba2f79d5bac7de52d97871.png)

