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

HelloWorld.vshost.exe HelloWorld.pdb HelloWorld.vshost.exe.manifest

这些文件有什么用途?


当前回答

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

其他回答

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

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

此外,您还可以关闭发布版本配置的vshost文件的创建,并启用调试功能。

步骤

项目属性>调试>配置(发布)>关闭Visual Studio托管进程 项目属性>调试>配置(调试)>启用Visual Studio托管进程

参考

MSDN如何:禁用托管进程 MSDN托管进程(vshost.exe)

摘自MSDN如何:禁用托管进程

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

禁用主机进程

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

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

一般情况下,当主机进程被禁用时: 开始调试. net框架应用程序所需的时间增加了。 设计时表达式求值不可用。 部分信任调试不可用。

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

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

有关更多信息,请参阅这篇MSDN文章和这篇博客文章。

.exe -“正常”可执行文件 .vshost.exe -一个特殊版本的可执行文件,以帮助调试;详情见MSDN .pdb -带有调试符号的程序数据库 .vshost.exe。清单——一种配置文件,主要包含对库的依赖

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