vshost.exe调试宿主(VS Debug Host Process)进程详解

Visual Studio 2005以后,编译完.NET程序以后,你会发现在bin文件夹里面除了生成的可执行exe文件以外,VS还自动给你生成了一个.vshost.exe文件。MSDN里面对这个程序的描述是:

下文引用自MSDN

§  提高的调试性能

宿主进程创建一个应用程序域并将调试器与应用程序关联起来。执行这些任务会导致在开始调试和开始运行应用程序之间有很明显的延迟。通过在后台创建应用程序域和关联调试器,并在运行应用程序之间保存应用程序域和调试器状态,宿主进程使性能得到提高。有关应用程序域的更多信息,请参见应用程序域。

§   部分信任调试

在“项目设计器”的安全页中,可将应用程序指定为部分信任应用程序。调试部分信任应用程序需要对应用程序域进行特殊的初始化。此初始化由宿主进程处理。

§   设计时表达式计算

设计时表达式计算使您可以从“即时”窗口进行代码测试,而不必运行应用程序。宿主进程在设计时表达式计算期间执行此代码。有关更多信息,请参见即时窗口。

然而VS 2005是如何使用.vshost.exe来做到上面说的这些功能(或者说改进)的呢?实际上你的托管程序是通过.vshost.exe启动的,而.vshost.exe是一个固定的程序,在每次启动调试过程前,VS会把.vshost.exe拷贝到被调试进程的同一目录里面,然后在后台帮你启动.vshost.exe以便节省调试时间,直到你关闭VS或者关闭当前的VS解决方案(.sln文件),VS才会终止.vshost.exe

.vshost.exe负责创建应用程序域并将调试器和自身关联起来,因为在你调试你的.NET工程的时候,.vshost.exe只启动一次,因此避免了每一次调试.NET可执行文件时准备调试环境的过程,然后.vshost.exe使用AppDomain.ExecuteAssembly函数来执行我们的可执行文件。这里是我猜测的.vshost.exe所提供的三个功能的流程:

§  提高的调试性能

 

 

§  部分信任调试

§  设计时表达式计算 ,这个只会影响到Class Library(类型库)工程,.vshost.exe.dll可执行文件加载到应用程序域里面,然后跟Visual Studio交互,获取表达式的值。如果将.vshost.exe禁用,那么你不能在类型库项目中使用设计时表达式计算这个功能。但是你仍然可以使用可执行文件的设计时表达式功能,这是因为Visual Studio通过直接启动你的可执行.exe文件来完成的。

 

你可能感兴趣的:(.net,测试,Class,exe,library,任务)