[*.vshost.exe] ---宿主进程
[*.vshost.exe] 也叫宿主进程,是VS2005/2008/2010中的一项功能,能提高调试性能,支持部分信任调试并支持设计时表达式计算。宿主进程文件的文件名中包含 vshost, 并位于项目的输出文件夹中。
托管程序是通过[*.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) 由 VS使用,不应通过应用程序直接运行或部署。
提高调试性能
宿主进程创建一个应用程序域并将调试器与应用程序关联起来。执行这些任务会导致在开始调试和开始运行应用程序之间有很明显的延迟。通过在后台创建应用程序域和关联调试器,并在运行应用程序之间保存应用程序域和调试器状态,宿主进程使性能得到提高。
部分信任调试
在“项目设计器”的安全页中,可将应用程序指定为部分信任应用程序。调试部分信任应用程序需要对应用程序域进行特殊的初始化。此初始化由宿主进程处理。
Visual Studio 宿主进程提高了调试器性能,并启用了新的调试器功能,如部分信任调试和设计时表达式计算。如果需要,您可以禁用宿主进程。
用宿主进程和不用宿主进程进行调试的一些差异
1) 部分信任调试和 Click-Once 安全
部分信任调试需要宿主进程。如果禁用宿主进程,部分信任调试将不工作,即使在“项目属性”的“安全”页上启用了部分信任安全。
2) 设计时表达式计算
设计时表达式始终使用宿主进程。如果在“项目属性”中禁用宿主进程,则禁用了类库项目的设计时表达式计算。对于其他项目类型,不禁用设计时表达式计算。相反,Visual Studio 启动实际可执行文件,并将它用于不用宿主进程的设计时计算。这种差异可能产生不同的结果。
3) AppDomain.CurrentDomain.FriendlyName 差异
AppDomain.CurrentDomain.FriendlyName 依据是否启用宿主进程返回不同的结果。如果启用宿主进程时调用 AppDomain.CurrentDomain.FriendlyName,它将返回 app_name.vhost.exe。如果禁用宿主进程时调用它,它将返回 app_name.exe。
4) Assembly.GetCallingAssembly().FullName 差异
Assembly.GetCallingAssembly().FullName 依据是否启用宿主进程返回不同的结果。如果启用宿主进程时调用 Assembly.GetCallingAssembly().FullName,它将返回 mscorlib。如果禁用宿主进程时调用 Assembly.GetCallingAssembly().FullName,它将返回该应用程序名。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。