让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 ...
随机推荐
- 【131】如何讲好PPT
1 列提纲2 写稿子3 背稿子4 演练5遍,用自己的话说出来,最好和稿子一样,但不强求一样,关键要理解5 不一定要做,但是做好了会有很大提高,讲的时候也会很NB:有时间可以再演练几遍,录出来看看哪里需 ...
- sql操作table
1.增加表字段 alter table tbsptrustquotdoc(表名) add chargeapplystate(字段名) char(1)(类型) default '1'(默认值) 2. ...
- spring MVC 如何查找URL对应的处理类
在spring 3.1之前,查找URL相应的处理方法,需要分两步,第一步是调用DefaultAnnotationHandlerMapping,查找到相应的controller类,第二步,再调用Anno ...
- visualC/C++连接MySql数据库
vs连接数据库其实就是将mysql数据库.h头文件接口.lib链接文件和dll执行文件加入到项目中.下面是配置如何加入. 转于http://www.cnblogs.com/justinzhang/ar ...
- class str
class str(object): """ str(object='') -> str str(bytes_or_buffer[, encoding[, erro ...
- How to create custom methods for use in spring security expression language annotations
From:http://stackoverflow.com/questions/6632982/how-to-create-custom-methods-for-use-in-spring-secur ...
- PHP抓取豆瓣读书爬虫代码
<?php//演示地址 http://asizu.sinaapp.com/reptile_douban.php//数据量不是特别大,没有写抓完数据便停止. 喜欢的朋友拿去自己改改就好了 head ...
- sqlite 对表的操作
查询某个表的创建语法 select sql from sqlite_master where tbl_name="your_table_name" and type='table' ...
- J2EE(java)后台调用ArcGIS Engine(AE)的部署和代码
arcgis的BS开发解决方案一直是个坑,主推的地图服务查询速度慢,需要异步,功能少.相对来说主要用于CS的AE功能更强大全面,只是部署有点复杂 本文软件环境: win7 sp1 64位 MyEcli ...
- Orchard官方文档
开始使用 安装Orchard 通过Orchard zip文件安装 使用WebMatrix开发Orchard Dashboard总览 创建你的第一个Orchard站点 导航和菜单 添加博客 新增管理媒体 ...