vshost.exe文件的目的是什么?

当我在c#中创建和编译一个“Hello, World!”应用程序时,除了主要的exe(例如HelloWorld.exe),我在Debug文件夹中得到了三个文件。

  1. HelloWorld.vshost.exe
  2. HelloWorld.pdb
  3. HelloWorld.vshost.exe.manifest

这些文件有什么用途?

197363 次浏览

vshost.exe文件是Visual Studio运行的可执行文件(Visual Studio主机可执行文件)。这是链接到Visual Studio并改进调试的可执行文件。

当您将应用程序分发给其他人时,不要使用vshost.exe或.pdb(调试数据库)文件。

vshost.exe特性是在Visual Studio 2005中引入的(回答您的评论)。

它的主要目的是使调试启动更快——基本上已经有一个运行框架的进程,只要你想要它就可以加载你的应用程序。

更多信息请参见这篇MSDN文章这篇博文

  • .exe -“正常”可执行文件

  • .vshost.exe -一个特殊版本的可执行文件,以帮助调试;详见MSDN

  • .pdb - 程序数据库带调试符号

  • .vshost.exe。manifest -一种配置文件,主要包含对库的依赖

我不确定,但我相信这是一个调试优化。但是,我通常会关闭它(请参阅项目的调试属性),我没有注意到任何放缓,并且在调试时没有看到任何限制。

它似乎是一个用于调试的长时间运行的框架过程(以减少加载时间?)我发现,当您从调试器启动应用程序两次时,通常会使用相同的vshost.exe进程。它只是首先卸载所有用户加载的dll。如果你在处理来自托管进程的API钩子,这会产生一些奇怪的事情。

此外,你可以关闭你的释放构建配置的vshost文件的创建,并为调试启用它。

步骤

  • 项目属性 > 调试 > Configuration (Release) >关闭Visual Studio托管进程
  • 项目属性 > 调试 > Configuration (Debug) >开启Visual Studio托管进程

截图from VS2010

参考

  1. MSDN如何:Disable the Hosting Process . bdn . href="https://msdn.microsoft.com/en-us/library/ms185330.aspx" rel="noreferrer">MSDN如何:Disable the Hosting Process
  2. MSDN主机进程(vshost.exe

节选自MSDN如何:禁用托管进程

当主机进程被启用时,对某些api的调用可能会受到影响。在这些情况下,有必要禁用托管进程以返回正确的结果。

禁用主机进程

  1. 在Visual Studio中打开一个可执行项目。不生成可执行文件的项目(例如,类库或服务项目)没有此选项。
  2. 项目菜单上,单击属性
  3. 单击调试选项卡。
  4. 清除启用Visual Studio托管进程复选框。

当托管进程被禁用时,一些调试特性不可用或性能下降。更多信息,参见调试和托管过程

一般情况下,当主机进程被禁用时:

  • 开始调试. net框架应用程序所需的时间增加了。
  • 设计时表达式求值不可用。
  • 部分信任调试不可用。