如何让ConfigurationManager打开任意的配置文件
VisualStudio的配置文件很好很强大,用来保存数据库连接字符串或键值对都非常方便,只需要通过ConfigurationManager的ConnectionStrings或AppSettings属性就可以随时取用。但ConfigurationManager打开的是工程的默认配置文件,而我有时候会有这样的需求:工程A通过某种方式引用了工程B,A和B都有各自的一些配置,我不想把B的配置写到A的配置文件里,而是希望B也有自己的配置文件。运行时程序从A启动,那我怎么样才能让ConfigurationManager能正确访问到B的配置文件呢?
翻翻ConfigurationManager的签名,有一个方法吸引了我的注意:OpenExeConfiguration(string exePath)。看上去我可以把B工程的配置文件路径作为参数传递到这个方法,执行后会返回一个Configuration对象,之后我就可以顺利的访问其中的配置信息了
可惜现实是残酷的,OpenExeConfiguration实在是一个古怪的方法,我发现成功调用需要满足几个雷人的条件:
1、参数exePath必须是 *.exe 或 *.config 的格式(可能还有其他格式,但 *.dll 肯定不行)
2、exePath对应的文件必须存在(例如 exePath = "C:/ProjectB.exe",那C盘下必须要有一个名为ProjectB.exe的文件),但实际上这个文件一点用也没有
3、方法调用后最终打开的配置文件实际上名为 exePath + ".config" (所以 exePath = "C:/ProjectB.exe" 时配置文件就是 C:/ProjectB.exe.config,而 *.config 的配置文件就得叫 *.config.config)
可能是微软工程师另有打算,也可能这个方法不是我想象中这样用的,总之上述几个条件真的让我望而却步了。要是每次总得在目录下添加一个空白文本,把名字取好后缀改为.exe,再把实际的配置文件的后缀改为.exe.config。。。这个OpenExeConfiguration恐怕不会让我更方便,只会让我更纠结。。
ConfigurationManager还有几个类似的方法,但我不知道怎么用,于是遍寻Google和MSDN。终于发现了真正能解决我问题的方法:OpenMappedExeConfiguration
不多说,直接上代码了:
string configPath = ...; ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = configPath; config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
如何让ConfigurationManager打开任意的配置文件的更多相关文章
- 让ConfigurationManager打开任意的配置文件
VisualStudio的配置文件很好很强大,用来保存数据库连接字符串或键值对都非常方便,只需要通过ConfigurationManager的ConnectionStrings或AppSettings ...
- 打开任意位置的webConfig
请阅读原文:打开任意的配置文件 翻翻ConfigurationManager的签名,有一个方法吸引了我的注意:OpenExeConfiguration(string exePath).看上去我可以把B ...
- 短信外部浏览器H5链接一键跳转微信打开任意站
今天讲讲微信跳转的那些事情,这项技术最早出现在在线广告上面,可以从外部引流到微信并打开微信内置浏览器然后打开一个指定的网页地址,在这个网页里面可以放任何想推广的内容,可以是引导文案.活动内容,或者是一 ...
- System.ConfigurationManager类用于对配置文件的读取
http://blog.csdn.net/ligenyingsr/article/details/54095986 System.ConfigurationManager类用于对配置文件的读取.其具有 ...
- ConfigurationManager读取dll的配置文件
ConfigurationManager读取dll的配置文件 最近一个项目,需要发布dll给第三方使用,其中需要一些配置参数. 我们知道.NET的exe工程是自带的App.config文件的,编译之后 ...
- 用ConfigurationManager读取和修改配置文件
为了方便有时我们会把一些简单的配置的信息放入web.config文件里. 放到appSettings添加key value等信息. ConfigurationManager.AppSettings ...
- 2019微信浏览器跳转外部浏览器下载app打开任意站实现方法
很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接和下载APP,其实这并不难,只要我们实现微信跳转功能即可.下面给大家介绍这个功能 方案实现教程: 功能目的 生成微 ...
- office2007每次打开都要配置文件,怎么取消配置
有时候 Office2007打开文档,每次都提示需要安装.配置,配置完成之后,下次打开又需要配置点击取消就不能打开.非常的烦.ffice2007下载后为什么每次打开总需要置?office2007每次打 ...
- office2007每次打开都要配置文件,怎么取消配置(可行)
取消打开软件进行配置的方法 打开“我的电脑”——“C盘”— —“Program Files\Common Files\ Microsoft Shared\OFFICE12\Office Setup C ...
随机推荐
- 第一次打开Photoshop时的基本设置
1.自定义工作区,自定义快捷键: (1)PS备份自定义工作区文件: C:\Users\smyhvae\AppData\Roaming\Adobe\Adobe Photoshop CC 2015\Ado ...
- tomcat和HTTP
tomcat和HTTP 1.tomcat的关闭和启动 启动:sudo /opt/tomcat/bin/startup.sh 关闭:sudo /opt/tomcat/bin/shutdown.sh 2. ...
- java之多线程 一
概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程. 进程与线程: 进程是指处于运 ...
- 不封装ajax 带url参数调用接口
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- [转]用Whois获得电信运营商的IP地址是如何分配的?
[转]用Whois获得电信运营商的IP地址是如何分配的? Linux下获得一些中国电信运营商的IP地址分配情况: APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信 ...
- ToolProvider.getSystemJavaCompiler() Return NULL!
http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html
- Writing Clean Code 读后感
最近花了一些时间看了这本书,书名是 <Writing Clean Code ── Microsoft Techniques for Developing Bug-free C Programs& ...
- 快速创建 IEqualityComparer 实例:改进
两年前,我写了篇文章<快速创建 IEqualityComparer<T> 和 IComparer<T> 的实例>,文中给出了一个用于快速创建 IEqualityCo ...
- phpstorm 激活服务器
phpstorm 激活服务器 http://jetbrains.tencent.click/ (2016-09-19 可用) webstorm 激活服务器 http://owo.help(2016-0 ...
- SOA总结(图片打开略慢请知晓)