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打开任意的配置文件的更多相关文章

  1. 让ConfigurationManager打开任意的配置文件

    VisualStudio的配置文件很好很强大,用来保存数据库连接字符串或键值对都非常方便,只需要通过ConfigurationManager的ConnectionStrings或AppSettings ...

  2. 打开任意位置的webConfig

    请阅读原文:打开任意的配置文件 翻翻ConfigurationManager的签名,有一个方法吸引了我的注意:OpenExeConfiguration(string exePath).看上去我可以把B ...

  3. 短信外部浏览器H5链接一键跳转微信打开任意站

    今天讲讲微信跳转的那些事情,这项技术最早出现在在线广告上面,可以从外部引流到微信并打开微信内置浏览器然后打开一个指定的网页地址,在这个网页里面可以放任何想推广的内容,可以是引导文案.活动内容,或者是一 ...

  4. System.ConfigurationManager类用于对配置文件的读取

    http://blog.csdn.net/ligenyingsr/article/details/54095986 System.ConfigurationManager类用于对配置文件的读取.其具有 ...

  5. ConfigurationManager读取dll的配置文件

    ConfigurationManager读取dll的配置文件 最近一个项目,需要发布dll给第三方使用,其中需要一些配置参数. 我们知道.NET的exe工程是自带的App.config文件的,编译之后 ...

  6. 用ConfigurationManager读取和修改配置文件

    为了方便有时我们会把一些简单的配置的信息放入web.config文件里. 放到appSettings添加key   value等信息. ConfigurationManager.AppSettings ...

  7. 2019微信浏览器跳转外部浏览器下载app打开任意站实现方法

    很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接和下载APP,其实这并不难,只要我们实现微信跳转功能即可.下面给大家介绍这个功能 方案实现教程: 功能目的 生成微 ...

  8. office2007每次打开都要配置文件,怎么取消配置

    有时候 Office2007打开文档,每次都提示需要安装.配置,配置完成之后,下次打开又需要配置点击取消就不能打开.非常的烦.ffice2007下载后为什么每次打开总需要置?office2007每次打 ...

  9. office2007每次打开都要配置文件,怎么取消配置(可行)

    取消打开软件进行配置的方法 打开“我的电脑”——“C盘”— —“Program Files\Common Files\ Microsoft Shared\OFFICE12\Office Setup C ...

随机推荐

  1. switch与ifelse的效率问题

    switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的.从而,swi ...

  2. 【Windows编程】系列第十篇:文本插入符

    大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符 ...

  3. MIT 6.824 : Spring 2015 lab3 训练笔记

    摘要: 源代码参见我的github:https://github.com/YaoZengzeng/MIT-6.824 Lab3: Paxos-based Key/Value Service Intro ...

  4. 图像处理工具V1.0

    图像处理工具V1.0(仿彗星图片处理工具.VS2015安装界面)----个人无聊作品 以下是界面: 部分代码一.(摘自网络----加水印代码): public static void ImageWat ...

  5. 洛谷CON1041 NOIP模拟赛一试

    A T2-power of 2 题目描述 是一个十分特殊的式子. 例如: n=0时 =2 然而,太大了 所以,我们让对10007 取模 输入输出格式 输入格式: n 输出格式:  % 10007 输入 ...

  6. quartz集群分布式(并发)部署解决方案-Spring

    项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...

  7. [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】

    1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...

  8. 关于ES6新增的东西

    查询浏览器对ES6的支持情况https://kangax.github.io/compat-table/es6/ Chrome.MS Edge.Firefox.Safari.Node和其它很多环境都已 ...

  9. Understanding Binomial Confidence Intervals 二项分布的置信区间

    Source: Sigma Zone, by Philip Mayfield The Binomial Distribution is commonly used in statistics in a ...

  10. jQuery美化下拉菜单插件dropkick

    dropkick是一款基于jquery库的美化下拉框下拉菜单的插件,它通过定制HTML插入可使丑陋无聊的<select>下拉列表变得美丽. name属性是唯一一个必需的填写的,不过你也应该 ...