【翻译】VSHOST 宿主进程
2010-07-23 09:43 刺客之家 阅读(676) 评论(1) 编辑 收藏 举报【为了阅读方便,本文进行了分段整理】
原文地址:http://blogs.msdn.com/b/dtemp/archive/2004/08/17/215764.aspx
【转载请注明出处!】
=========================================
如果曾经使用过新的VS2005测试版,那么您应当会发现bin目录下多出了一些以vshost命名的文档。例如,当您创建好一个winform程序之后按下F5运行程序,将会发现类似于WindowsApplication1.vshost.exe文件和WindowsApplication1.vshost.exe.config文件。本文试图简单阐述这些文件生成的原因,并且回答几个网友常问的问题。
什么是"vshost"?
这是一个“宿主进程”,只要你在vs2005 IDE环境下构建一个项目,它就会被创建。它的主要目标是能提高F5调试性能,支持部分信任调试并支持设计时表达式计算。
提高F5调试性能:
众所周知,当点击F5的时候您的应用程序就启动了。然而,运行一个托管的应用程序需要创建一个叫做"AppDomain"(应用程序域)的东西,它负责保存应用程序运行所在的“运行时环境”。如果从头开始创建一个AppDomain并且初始化围绕它的调试器等工具,需要花费不少时间,这个现象当应用程序一遍又一遍的运行时将更为明显。
一个不争的事实是:当应用程序结束时,所有AppDomain相关的资源全部丢失,当点击F5再次启动程序时,又要重新加载他们(这明显是浪费时间和资源的);宿主进程的作用就是在后台帮你的应用程序做好这一切,并且在应用程序关闭之后为您保存AppDomain的状态,避免重复劳动。
部分信任调试:
vs2005的一个新特性之一,就是能够在新的安全页所定义的部分信任模式下调试一个应用程序(这段字面意思是这样- -||,自己也不是很清楚什么意思)。当您部署一个部分信任模式的应用程序,它会自动运行在一个有限的安全上下文内(Context,大家应该不陌生)。然而,在Vs2005环境下利用调试器模拟一个部分信任环境需要应用程序域的支持(AppDomain),这个域就是由宿主进程来维护的。
设计时表达式演算:
vs2005的另外一个新特性是具有在即时窗口中测试应用程序中的代码,而不用真正运行应用程序的能力。同样是利用宿主进程在编码时实时运行您的代码。(译者:可能就是我们写代码的过程中即时提醒程序语法等功能,甚至不需要要编译)
它在我们的Bin文件夹里做什么?
至于vshost文件为啥必须和应用程序在同一个目录,是有许多技术上的原因的^_^,当您的应用程序伴随着宿主进程运行时,vshost是在AppDomain中执行程序集的最高层(我理解是最底层- -||),而不是您的应用程序本身。并且如果vshost文件不是和其他应用程序文件在同一个目录的话,所有的程序集,配置文件和所有的ClickOnce、side-by-side 装配件清单都无法被正确的载入。
我应当和我的应用程序一起部署"vshost"么?
不用,这几个文件仅仅是用来给vs2005 IDE使用的,他们无法正确的单独运行,而不用同您的应用程序一道部署。
我能禁止产生vshost文件么?
在Beta1版本的环境中对于所有的Winform应用程序这是必备的特性,但是在Beta2版本中,我们确实增加了一个选项来禁止这项功能。当然后果是您将无法享受到上面提到的所有好处。假如您在调试过程中发现了由于这项特性导致的bug的时候,请上报!
鉴于本人水平有限,翻译中难免纰漏,欢迎大家拍砖。