引用:
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
?
不多說,直接上代碼了:
?
ExeConfigurationFileMap?map? = ? new ?ExeConfigurationFileMap();
map.ExeConfigFilename? = ?configPath;
config? = ?ConfigurationManager.OpenMappedExeConfiguration(map,?ConfigurationUserLevel.None);
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
