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


483

当我创建并编译“ Hello,World!”时 C#中的应用程序,除主exe外,我在Debug文件夹中获得了三个文件(例如,HelloWorld.exe)

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

这些文件起什么作用?

Answers:


416

vshost.exe功能是Visual Studio 2005引入的(回答您的评论)。

它的目的主要是为了加快调试的启动速度-基本上已经有一个运行框架的进程,可以随时将其加载。

请参阅此MSDN文章此博客文章以获取更多信息。


29
那么,之所以当我从调试器中运行Console.Write(System.AppDomain.CurrentDomain.FriendlyName),我得到app.vshost.exe,当我直接从exe文件运行,我得到输出APP.EXE
米伦

@ Milen,msdn.microsoft.com / en-us / library / ms242202.aspx 提到了带或不带主机进程的AppDomain.CurrentDomain.FriendlyName的不同结果。
汤姆森

2
如果存在vschost和.pdb文件用于调试目的,那么为什么当我在Release中进行编译时仍将它们包括在内?
iliketocode

1
我猜他们在Visual Studio 2017年删除它
菲利普Fujiy Pessoto


62

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

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


我记得在VS2003中我们没有这样的可执行文件(但是我们确实有断点)。您能详细说明一下吗?
Mehrdad Afshari,2009年

1
此外,清单是有关应用程序的元数据,通常也链接到可执行文件中。.pdb文件是可移植调试数据库,包含有关已编译可执行文件的调试信息,例如可执行文件中的哪一点对应于代码的哪一行。
乔伊,

3
VS主机进程仅用于改进调试-但不能启用调试。
DanielBrückner09年

23

此外,您可以为Release构建配置关闭vshost文件的创建,并启用Debug

脚步

  • 项目属性 > 调试 >配置(发布)>禁用Visual Studio托管过程
  • 项目属性 > 调试 >配置(调试)>启用Visual Studio托管过程

VS2010的屏幕截图

参考

  1. MSDN如何:禁用托管过程
  2. MSDN托管过程(vshost.exe)

摘录自 MSDN的如何:禁用托管过程

启用托管过程后,对某些API的调用可能会受到影响。在这些情况下,有必要禁用托管过程以返回正确的结果。

禁用托管过程

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

禁用主机进程后,一些调试功能将不可用或性能下降。有关更多信息,请参见调试和托管过程

通常,禁用托管过程时:

  • 开始调试.NET Framework应用程序所需的时间增加。
  • 设计时表达式评估不可用。
  • 部分信任调试不可用。

10

我不确定,但是我相信这是调试优化。但是,我通常将其关闭(请参阅项目的Debug属性),并且我没有注意到任何减速,并且在调试方面没有任何限制。


什么是“警卫队”?使用此处的答案之一引用用户?还有别的吗 您能否更新答案(例如,使用直接链接,因为用户名可以随时更改)?
Peter Mortensen

我认为这是对另一个答案的引用,但这是在09年,如果我不记得详细信息,请原谅我。
Brian Rasmussen

2

这似乎是一个运行很长时间的框架过程,需要进行调试(以减少加载时间?)。我发现从调试器启动应用程序两次时,通常会使用相同的vshost.exe进程。它只是首先卸载所有用户加载的DLL。如果您在托管进程中使用API​​挂钩,这会产生奇怪的结果。


1
当我的项目中有一些代码可以执行P / Invoke时,持久性进程还会导致异常(访问冲突)。在禁用主机进程后,问题消失了。
汤姆森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.