¿Cuál es el propósito del archivo vshost.exe?

483

Cuando creo y compilo un "¡Hola, mundo!" aplicación en C #, obtengo tres archivos en la carpeta Debug aparte del exe principal (por ejemplo, HelloWorld.exe)

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

¿Para qué sirven estos archivos?

Milen
fuente

Respuestas:

416

La característica vshost.exe se introdujo con Visual Studio 2005 (para responder a su comentario).

El propósito de esto es principalmente hacer que el inicio de la depuración sea más rápido: básicamente ya existe un proceso con el marco en ejecución, listo para cargar su aplicación tan pronto como lo desee.

Consulte este artículo de MSDN y esta publicación de blog para obtener más información.

Jon Skeet
fuente
29
Esa es la razón por la cual cuando ejecuto Console.Write (System.AppDomain.CurrentDomain.FriendlyName) desde el depurador, obtengo app.vshost.exe y cuando ejecuto directamente desde el exe obtengo la salida como app.exe
Milen
@Milen, msdn.microsoft.com/en-us/library/ms242202.aspx mencionó el resultado diferente de AppDomain.CurrentDomain.FriendlyName con y sin proceso de host.
Thomson
2
Si existen archivos vschost y .pdb con fines de depuración, ¿por qué todavía se incluyen cuando compilo en Release?
iliketocode
1
Supongo que lo eliminaron en Visual Studio 2017
Felipe Fujiy Pessoto
175
  • .exe: el ejecutable 'normal'

  • .vshost.exe: una versión especial del ejecutable para facilitar la depuración; ver MSDN para más detalles

  • .pdb: la base de datos del programa con símbolos de depuración

  • .vshost.exe.manifest: un tipo de archivo de configuración que contiene principalmente dependencias de bibliotecas

Daniel Brückner
fuente
62

El archivo vshost.exe es el ejecutable ejecutado por Visual Studio (ejecutable del host de Visual Studio). Este es el ejecutable que enlaza con Visual Studio y mejora la depuración.

Cuando distribuye su aplicación a otros, no utiliza los archivos vshost.exe o .pdb (base de datos de depuración).

Will Eddins
fuente
Recuerdo que no teníamos tal ejecutable en VS2003 (sin embargo, teníamos puntos de interrupción). Puedes profundizar sobre eso?
Mehrdad Afshari
1
Además, el manifiesto son metadatos sobre la aplicación que generalmente también se vinculan al ejecutable. El archivo .pdb es una base de datos de depuración portátil y contiene información de depuración sobre el ejecutable compilado, como qué punto del ejecutable corresponde a qué línea del código.
Joey el
3
El proceso de host VS solo se usa para mejorar la depuración, pero no habilita la depuración.
Daniel Brückner el
23

Además, puede desactivar la creación de archivos vshost para su configuración de compilación de lanzamiento y habilitarlo para la depuración .

Pasos

  • Propiedades del proyecto > Depurar > Configuración (versión)> Deshabilitar el proceso de alojamiento de Visual Studio
  • Propiedades del proyecto > Depurar > Configuración (Depurar)> Habilitar el proceso de alojamiento de Visual Studio

Captura de pantalla de VS2010

Referencia

  1. MSDN Cómo: Deshabilitar el proceso de alojamiento
  2. Proceso de alojamiento de MSDN (vshost.exe)

Extracto de MSDN Cómo: deshabilitar el proceso de alojamiento

Las llamadas a ciertas API pueden verse afectadas cuando el proceso de alojamiento está habilitado. En estos casos, es necesario deshabilitar el proceso de alojamiento para devolver los resultados correctos.

Para deshabilitar el proceso de alojamiento

  1. Abra un proyecto ejecutable en Visual Studio. Los proyectos que no producen ejecutables (por ejemplo, biblioteca de clases o proyectos de servicio) no tienen esta opción.
  2. En el menú Proyecto , haga clic en Propiedades .
  3. Haz clic en la pestaña Depurar .
  4. Desactive la casilla de verificación Habilitar el proceso de alojamiento de Visual Studio .

Cuando el proceso de alojamiento está deshabilitado, varias funciones de depuración no están disponibles o experimentan una disminución del rendimiento. Para obtener más información, consulte Depuración y el proceso de alojamiento .

En general, cuando el proceso de alojamiento está deshabilitado:

  • El tiempo necesario para comenzar a depurar aplicaciones .NET Framework aumenta.
  • La evaluación de expresión en tiempo de diseño no está disponible.
  • La depuración parcial de confianza no está disponible.
SimplyInk
fuente
10

No estoy seguro, pero creo que es una optimización de depuración. Sin embargo, generalmente lo apago (ver Propiedades de depuración para el proyecto) y no noto ninguna desaceleración y no veo limitaciones cuando se trata de la depuración.

Brian Rasmussen
fuente
¿Qué es "guardia"? ¿Referencia a un usuario con una de las respuestas aquí? ¿Algo más? ¿Puede actualizar su respuesta (por ejemplo, con un enlace directo, ya que los nombres de usuario pueden cambiar en cualquier momento)?
Peter Mortensen
Creo que esto fue una referencia a otra respuesta, pero esto fue en 09, así que perdóname si no recuerdo los detalles.
Brian Rasmussen
2

Parece ser un proceso de marco de larga duración para la depuración (¿para disminuir los tiempos de carga?). Descubrí que cuando inicia su aplicación dos veces desde el depurador, a menudo se utilizará el mismo proceso vshost.exe. Simplemente descarga todas las DLL cargadas por el usuario primero. Esto hace cosas extrañas si estás jugando con los enganches API de los procesos administrados.

Joshua
fuente
1
El proceso persistente también causa una excepción (violación de acceso) cuando mi proyecto tiene algún código para hacer P / Invoke. El problema desapareció después de que deshabilité el proceso de host.
Thomson