Qual è lo scopo del file vshost.exe?


483

Quando creo e compilo un "Hello, World!" applicazione in C #, ottengo tre file nella cartella Debug a parte l'exe principale (ad esempio HelloWorld.exe)

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

A quale scopo servono questi file?

Risposte:


416

La funzione vshost.exe è stata introdotta con Visual Studio 2005 (per rispondere al tuo commento).

Lo scopo è principalmente quello di rendere più rapido l'avvio del debug - in pratica esiste già un processo con il framework in esecuzione, pronto per caricare l'applicazione non appena lo si desidera.

Vedi questo articolo MSDN e questo post sul blog per ulteriori informazioni.


29
Questo è il motivo per cui quando eseguo Console.Write (System.AppDomain.CurrentDomain.FriendlyName) dal debugger, ottengo app.vshost.exe e quando eseguo direttamente dall'exe ottengo l'output come app.exe
Milen

@Milen, msdn.microsoft.com/en-us/library/ms242202.aspx citato il diverso risultato di AppDomain.CurrentDomain.FriendlyName con e senza processo host.
Thomson

2
Se i file vschost e .pdb esistono per scopi di debug, perché sono ancora inclusi quando compilo in Release?
codice iliket

1
Immagino che lo abbiano rimosso in Visual Studio 2017
Felipe Fujiy Pessoto il


62

Il file vshost.exe è l'eseguibile eseguito da Visual Studio (eseguibile host di Visual Studio). Questo è l'eseguibile che collega a Visual Studio e migliora il debug.

Quando si distribuisce l'applicazione ad altri, non utilizzare i file vshost.exe o .pdb (database di debug).


Ricordo che non avevamo un simile eseguibile in VS2003 (eppure avevamo punti di interruzione). Puoi approfondire questo?
Mehrdad Afshari,

1
Inoltre, il manifest è metadata sull'applicazione che di solito viene anche collegato all'eseguibile. Il file .pdb è un database di debug portatile e contiene informazioni di debug sull'eseguibile compilato, ad esempio quale punto nell'eseguibile corrisponde a quale riga nel codice.
Joey,

3
Il processo host VS viene utilizzato solo per migliorare il debug, ma non consente il debug.
Daniel Brückner,

23

Inoltre, è possibile disattivare la creazione di file vshost per la configurazione della build di rilascio e averlo abilitato per il debug .

passi

  • Proprietà del progetto > Debug > Configurazione (versione)> Disabilita il processo di hosting di Visual Studio
  • Proprietà del progetto > Debug > Configurazione (Debug)> Abilita il processo di hosting di Visual Studio

Schermata di VS2010

Riferimento

  1. MSDN Procedura: disabilitare il processo di hosting
  2. Processo di hosting MSDN (vshost.exe)

Estratto da MSDN Procedura: disabilitare il processo di hosting

Le chiamate a determinate API possono essere influenzate quando il processo di hosting è abilitato. In questi casi, è necessario disabilitare il processo di hosting per restituire i risultati corretti.

Per disabilitare il processo di hosting

  1. Apri un progetto eseguibile in Visual Studio. I progetti che non producono file eseguibili (ad esempio librerie di classi o progetti di servizio) non dispongono di questa opzione.
  2. Nel menu progetto , fare clic su Proprietà .
  3. Fai clic sulla scheda Debug .
  4. Deseleziona la casella di controllo Abilita il processo di hosting di Visual Studio .

Quando il processo di hosting è disabilitato, diverse funzionalità di debug non sono disponibili o si verificano prestazioni ridotte. Per ulteriori informazioni, consultare Debug e il processo di hosting .

In generale, quando il processo di hosting è disabilitato:

  • Il tempo necessario per iniziare il debug delle applicazioni .NET Framework aumenta.
  • La valutazione dell'espressione in fase di progettazione non è disponibile.
  • Il debug di trust parziale non è disponibile.

10

Non ne sono sicuro, ma credo sia un'ottimizzazione del debug. Tuttavia, di solito lo spengo (vedi Proprietà di debug per il progetto) e non noto alcun rallentamento e non vedo limiti quando si tratta di debug.


Che cos'è "Guard"? Riferimento a un utente con una delle risposte qui? Qualcos'altro? Puoi aggiornare la tua risposta (ad es. Con un collegamento diretto, poiché i nomi degli utenti possono cambiare in qualsiasi momento)?
Peter Mortensen,

Penso che questo fosse un riferimento a un'altra risposta, ma era nel 09, quindi perdonami se non ricordo i dettagli.
Brian Rasmussen,

2

Sembra essere un processo framework di lunga durata per il debug (per ridurre i tempi di caricamento?). Ho scoperto che quando avvii l'applicazione due volte dal debugger, verrà spesso utilizzato lo stesso processo vshost.exe. Scarica prima tutte le DLL caricate dall'utente. Questo fa cose strane se stai scherzando con gli hook API dai processi gestiti.


1
Il processo persistente causa anche un'eccezione (violazione di accesso) quando il mio progetto ha del codice per eseguire P / Invoke. Il problema è scomparso dopo aver disabilitato il processo host.
Thomson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.