app.config *.exe.config 和*.vshost.exe.config基礎學習


 

一.問題描述

    在使用config文件來保存一些參數,便於下次啟動程序時自動加載上次設置的參數的功能時,

碰到個問題,vs2010下調試運行程序始終無法實現config記錄上次參數值,而直接運行exe程序

又是可以的。

    那么vs下直接調試運行和exe運行有什么區別呢?

二.vs調試運行程序

    從vs2005開始,vs調試加入了承載進程(vshost.exe) 引用msdn中有關介紹:

  1. 提高調試性能
  2. 部分信任調試
  3. 設計時表達式計算

(可以設置禁用,參照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文件必須有。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM