一.問題描述
在使用config文件來保存一些參數,便於下次啟動程序時自動加載上次設置的參數的功能時,
碰到個問題,vs2010下調試運行程序始終無法實現config記錄上次參數值,而直接運行exe程序
又是可以的。
那么vs下直接調試運行和exe運行有什么區別呢?
二.vs調試運行程序
從vs2005開始,vs調試加入了承載進程(vshost.exe) 引用msdn中有關介紹:
- 提高調試性能
- 部分信任調試
- 設計時表達式計算
(可以設置禁用,參照msdn禁用承載進程)
承載進程詳解可以參照http://blog.csdn.net/Donjuan/article/details/3849200
三.app.config, *.exe.config 和 *.vshost.exe.config區別
1.app.config
作為開發時配置參數的文件,可以在vs開發時右鍵屬性設置是否復制到可執行程序同目錄下(默認始終不復制)。
在不復制的情況下,編譯生成可執行程序時會copy該文件為*.exe.config文件和*.vshost.exe.config文件。
這樣的話,在*/bin/debug/ 或者*/bin/release/目錄下就不會有app.config文件了,對應的有exe.config和vshost.exe.config。
以后運行exe文件所操作的配置文件(通過System.Configuration對象,System.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None))
直接修改的是exe.config文件。
2.*.exe.config
vs調試編譯時,如果app.config文件有修改,則會重新copy覆蓋到exe.config和vshost.exe.config文件中,
否則exe.config不會改變。exe.config文件為程序實際運行時(直接運行.exe程序)直接操作的配置文件。
3.*.vshost.exe.config
該文件主要是在vs調試運行時起作用,在調試運行程序時(*vshost.exe -> *.exe)先copy *.exe.config覆蓋
*.vshost.exe.config,然后運行程序時操作的配置文件為*.vshost.exe.config.在調試程序結束時(*.exe -> *.vshost.exe)
再次copy *.exe.config覆蓋*.vshost.exe.config。 所有調試情況下無論怎么修改配置文件,程序退出后都不會修改配置文件(還原了)。
所以在vs調試運行程序時通過配置文件來記錄之前的操作無法生效。
實際release版本的exe程序時,*.vshost.exe.config 和app.config(如果copy了的話)可以不要的,但是*.exe.config文件必須有。