当我在C#中创建并编译“hello world”应用程序时,除了主exe之外,我在Debug文件夹中得到三个文件(例如HelloWorld.exe)
这些文件的用途是什么?
答案 0 :(得分:407)
VS2005引入了vshost.exe功能(回答你的评论)。
它的目的主要是让调试启动更快 - 基本上已经有一个框架运行的过程,只需准备好在你想要的时候加载你的应用程序。
有关详细信息,请参阅this MSDN article和this blog post。
答案 1 :(得分:170)
.exe - “正常”可执行文件
.vshost.exe - 可执行文件的特殊版本,用于辅助debuging;有关详细信息,请参阅MSDN
.pdb - 带有调试符号的Program Data Base
.vshost.exe.manifest - 一种configuration file,主要包含对库的依赖
答案 2 :(得分:62)
vshost.exe文件是Visual Studio运行的可执行文件(visual studio主机可执行文件)。这是链接到Visual Studio并改进调试的可执行文件。
当您将应用程序分发给其他人时,不要使用vshost.exe或.pdb(调试数据库)文件。
答案 3 :(得分:17)
此外,您可以为发布构建配置关闭vshost文件的创建,并为调试启用它。
<强>步骤强>
<强>参考强>
摘自MSDN How to: Disable the Hosting Process
启用主机进程时,可能会影响对某些API的调用。在这些情况下,必须禁用托管过程以返回正确的结果。
禁用托管流程
禁用托管过程时,多个调试功能不可用或性能下降。有关详细信息,请参阅Debugging and the Hosting Process。
通常,当托管过程被禁用时:
- 开始调试.NET Framework应用程序所需的时间增加。
- 设计时表达式评估不可用。
- 部分信任调试不可用。
答案 4 :(得分:10)
我不确定,但我相信这是一个调试优化。但是,我通常将其关闭(请参阅项目的调试属性)并且我没有注意到任何减速,并且我看到在调试方面没有任何限制,因此根据Guard的说明,它当然不需要进行调试。
答案 5 :(得分:2)
这似乎是一个长期运行的调试框架过程(减少加载时间?)。我发现当您从调试器启动应用程序两次时,通常会使用相同的vshost.exe进程。它只是首先卸载所有用户加载的DLL。如果您在使用来自托管进程的API挂钩时,这会很奇怪。