none
vs08 app.config文件的怪问题 RRS feed

  • 问题

  • 我发觉每次在08里面调试程序,当我把调试的程序关了,退回到ide后,那个app.config文件,总会给覆盖成之前的,有什么办法可以取消了这个呢
    2009年9月23日 9:37

答案

  • 呵呵,是比较麻烦的一个问题。如果可以的话,最好不要动态的改配置文件吧,我不知道这样是不是可以呢?

    关于这个怪问题,我有这样的一个想法:

    对于有config文件的项目来说,如果经过VS IDE的编译、运行之后,VS会生成exe.config和vshost.exe.config文件到bin\debug目录下。
    关于vshost(宿主进程),你可以参考一下这篇博客:http://blogs.msdn.com/dtemp/archive/2004/08/17/215764.aspx 

    在博客中有这么一段:

    "As everyone knows, when you hit F5 your program is run. However, running a managed application requires the creation of something called an "AppDomain", which houses the runtime environment within which your application runs. It actually takes quite a bit of time to create an AppDomain and initialize the debugger along with it. This introduces a lag which is particularly noticeable when you are doing it over and over again. The problem is exacerbated by the fact that when your application ends, all of the AppDomain and debugger state is lost. When you hit F5 again, everything must be created and initialized again. The hosting process speeds up this process by doing all of this work in the background before you hit F5, and keeping the state around between runs of your application."

    其中有提到,对于managed application,在运行的时候都需要生成AppDomain来控制运行时的环境。由于新建和初始化AppDomain是很花时间的,而且当程序运行结束的时候,AppDomain是会消失掉的,这就意味着重新运行程序的话,又要重新生成和初始化了。所以通过VS IDE中的宿主进程,当程序结束的时候,也就是在你再次按下F5之前,这些新建和初始化的动作就在后台被完成了。

    因此,根据之前的那个CSDN上的帖子和这个博客的内容,我推测,这也是为什么通过VS IDE运行程序的时候,你的程序结束了,项目中的config文件就被覆盖成之前的文件了。但是你直接运行就不会出现这个问题

    希望对你有所帮助。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 启天 2009年9月27日 2:43
    2009年9月26日 16:35

全部回复

  • 你好!
         我按你说的测试了一下,没有发现这个问题啊!
         你新建一个项目试试,看看是否有这个问题!
    周雪峰
    2009年9月23日 10:31
    版主
  • 奇怪的是,如果我不通过ide调试,而是直接运行的话,就正常
    2009年9月24日 8:54
  • 请问你是按F5启动的调试吗?
    周雪峰
    2009年9月24日 9:31
    版主
  • 你好!

    首先,建议你按照周版主的建议,新建个项目试试看,如果新项目运行正常的话,说明可能是你这个项目引起的问题。

    或者你可以用Process Monitor tool:http://technet.microsoft.com/zh-cn/sysinternals/bb896645.aspx,监视一下当你用IDE进行调试的时候,究竟是什么引起了app.config文件被覆盖的原因。

    另外,我不是很确定,但是你看看会不会跟这个问题有点类似?
    http://topic.csdn.net/t/20060820/16/4962549.html

    希望能对你有所帮助。

    (本回复中包含了第三方网站,微软无法控制和测试此类网站或者该网站提供的软件,因此,微软无法保证此类网站的质量和安全性。微软提醒您在下载软件或者打开网站之前确定您了解了该网站的安全性。)


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年9月24日 10:12
  • 嗯,确实是跟csdn那个帖子描述的一样

    2009年9月26日 9:39
  • 问题是,那个读取配置文件的代码是我自己写在dll里面的,要获取exe文件的名称的话,就一定要应用 system.window.form 文件咯?要是当前是在web里面调用的话,那不也是麻烦
    2009年9月26日 9:43
  • 呵呵,是比较麻烦的一个问题。如果可以的话,最好不要动态的改配置文件吧,我不知道这样是不是可以呢?

    关于这个怪问题,我有这样的一个想法:

    对于有config文件的项目来说,如果经过VS IDE的编译、运行之后,VS会生成exe.config和vshost.exe.config文件到bin\debug目录下。
    关于vshost(宿主进程),你可以参考一下这篇博客:http://blogs.msdn.com/dtemp/archive/2004/08/17/215764.aspx 

    在博客中有这么一段:

    "As everyone knows, when you hit F5 your program is run. However, running a managed application requires the creation of something called an "AppDomain", which houses the runtime environment within which your application runs. It actually takes quite a bit of time to create an AppDomain and initialize the debugger along with it. This introduces a lag which is particularly noticeable when you are doing it over and over again. The problem is exacerbated by the fact that when your application ends, all of the AppDomain and debugger state is lost. When you hit F5 again, everything must be created and initialized again. The hosting process speeds up this process by doing all of this work in the background before you hit F5, and keeping the state around between runs of your application."

    其中有提到,对于managed application,在运行的时候都需要生成AppDomain来控制运行时的环境。由于新建和初始化AppDomain是很花时间的,而且当程序运行结束的时候,AppDomain是会消失掉的,这就意味着重新运行程序的话,又要重新生成和初始化了。所以通过VS IDE中的宿主进程,当程序结束的时候,也就是在你再次按下F5之前,这些新建和初始化的动作就在后台被完成了。

    因此,根据之前的那个CSDN上的帖子和这个博客的内容,我推测,这也是为什么通过VS IDE运行程序的时候,你的程序结束了,项目中的config文件就被覆盖成之前的文件了。但是你直接运行就不会出现这个问题

    希望对你有所帮助。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 启天 2009年9月27日 2:43
    2009年9月26日 16:35
  • 嗯,应该是这个问题

    2009年9月27日 2:43
  • 呵呵,是比较麻烦的一个问题。如果可以的话,最好不要动态的改配置文件吧,我不知道这样是不是可以呢?

    关于这个怪问题,我有这样的一个想法:

    对于有config文件的项目来说,如果经过VS IDE的编译、运行之后,VS会生成exe.config和vshost.exe.config文件到bin\debug目录下。
    关于vshost(宿主进程),你可以参考一下这篇博客:http://blogs.msdn.com/dtemp/archive/2004/08/17/215764.aspx  

    在博客中有这么一段:

    "As everyone knows, when you hit F5 your program is run. However, running a managed application requires the creation of something called an "AppDomain" , which houses the runtime environment within which your application runs. It actually takes quite a bit of time to create an AppDomain and initialize the debugger along with it. This introduces a lag which is particularly noticeable when you are doing it over and over again. The problem is exacerbated by the fact that when your application ends, all of the AppDomain and debugger state is lost. When you hit F5 again, everything must be created and initialized again. The hosting process speeds up this process by doing all of this work in the background before you hit F5, and keeping the state around between runs of your application ."

    其中有提到,对于managed application,在运行的时候都需要生成AppDomain来控制运行时的环境。由于新建和初始化AppDomain是很花时间的,而且当程序运行结束的时候,AppDomain是会消失掉的,这就意味着重新运行程序的话,又要重新生成和初始化了。所以通过VS IDE中的宿主进程,当程序结束的时候,也就是在你再次按下F5之前,这些新建和初始化的动作就在后台被完成了。

    因此,根据之前的那个CSDN上的帖子和这个博客的内容,我推测,这也是为什么通过VS IDE运行程序的时候,你的程序结束了,项目中的config文件就被覆盖成之前的文件了。但是你直接运行就不会出现这个问题

    希望对你有所帮助。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.

    YiChun Chen,你好!
         想请教一下你,如果这样解释的话,为什么我无法重现这个问题,我也修改了配置文件,但是在我的机器上并没有出现配置文件被覆盖的问题!
    周雪峰
    2009年9月27日 4:35
    版主
  • 嗯?不会把。,,我试了一下,把那个宿主程序关掉,然后就正常了,其实也没感觉的出会慢多少

    2009年9月27日 14:49
  • 嗯?或许你可以看看你的那个设置是不是给你关掉了,或者说,你读取的配置文件本身就是 .exe.config的那个文件
    2009年9月27日 14:50
  • YiChun Chen,你好!
         想请教一下你,如果这样解释的话,为什么我无法重现这个问题,我也修改了配置文件,但是在我的机器上并没有出现配置文件被覆盖的问题!
    周雪峰

    呵呵,好像是有点奇怪,我也是在代码里修改的,出现了跟启天一样的问题,宿主进程开着。

    同意启天的看法,你查一下是不是你把宿主进程关掉了?或者跟你修改的配置文件的关系?

    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年9月28日 2:20
  • 原来你们是运行时改的啊!我是手动改的,所以没有遇到这个问题啊!
    周雪峰
    2009年9月28日 5:20
    版主
  • 呵呵,那应该就是这个原因了。 :)
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年9月28日 5:23
  • 呵呵,当然是要运行时修改啦,要是手动修改的话,肯定没那个问题,主要是我用configuration那个类修改的时候,传递的参数不是文件路径,所以默认会是修改那个带vshost的config文件

    2009年9月28日 14:22