2009-04-21 20 views
437

Quando creo e compilare un "ciao mondo" applicazione in C#, ottengo tre file nella cartella di debug a parte l'exe principale (ad es Helloworld.exe)Qual è lo scopo del file vshost.exe?

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

quale scopo fare questi file servono?

risposta

382

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

Lo scopo è principalmente quello di rendere più veloce il debugging, in pratica c'è già un processo con il framework in esecuzione, pronto per caricare l'applicazione non appena lo si desidera.

Vedere this MSDN article e this blog post per ulteriori informazioni.

+25

Ecco perché quando eseguo Console.Write (System.AppDomain.CurrentDomain.FriendlyName) dal debugger, ottengo app.vshost.exe e quando esco direttamente dall'exe ricevo output come app.exe – Milen

+2

Grazie per aver risposto al mio commento. Era una delle cose che non conoscevo dal VS2005 ed ero troppo pigro e non mi importava abbastanza di cercare e imparare! –

+0

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

58

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

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

+0

Mi ricordo che non avevamo un tale eseguibile in VS2003 (eppure avevamo dei punti di interruzione). Puoi approfondire questo? –

+1

Inoltre, manifest è metadata sull'applicazione che di solito viene anche collegata all'eseguibile. Il file .pdb è un database di debug portatile e contiene informazioni di debug sull'eseguibile compilato, come se il punto nell'eseguibile corrisponda a quale riga nel codice. – Joey

+3

Il processo host VS viene utilizzato solo per migliorare il debug, ma non abilita il debug. –

158
  • .exe - il 'normale' eseguibile

  • .vshost.exe - una versione speciale del file eseguibile per aiutare debuging; vedi MSDN per i dettagli

  • PDB - la Program Data Base con simboli di debug

  • .vshost.exe.manifest - una sorta di configuration file contenente principalmente le dipendenze da librerie

10

non sono sicuro , ma credo che sia un'ottimizzazione per il debug. Tuttavia, di solito lo spengo (vedi Debug properties per il progetto) e non noto alcun rallentamento e non vedo limitazioni quando si tratta di debug, quindi non è certamente necessario per il debug come dichiarato da Guard.

2

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

+1

Il processo persistente causa anche un'eccezione (violazione di accesso) quando il mio progetto ha del codice per fare P/Invoke. Il problema è scomparso dopo aver disabilitato il processo host. – Thomson

10

Aggiungendo, è possibile disattivare la creazione di file vshost per la configurazione di generazione uscita e lo hanno abilitato per Debug.

Passi

  • Proprietà progetto>Debug> Configurazione (Release)> Disabilitare il Visual Studio che ospita processo
  • Proprietà progetto>Debug> Configurazione (Debug)> Abilita il processo di hosting di Visual Studio

Screenshot from VS2010

Riferimento

  1. MSDN How to: Disable the Hosting Process
  2. MSDN Hosting Process (vshost.exe)

Estratto dal MSDN How to: Disable the Hosting Process

chiamate verso alcune API possono essere influenzati quando il proce di hosting ss è abilitato. In questi casi, è necessario disabilitare il processo di hosting per restituire i risultati corretti.

Per disattivare il processo di hosting

  1. Aprire un progetto eseguibile in Visual Studio. I progetti che non producono file eseguibili (ad esempio, librerie di classi o progetti di servizio) non hanno questa opzione.
  2. Nel menu Progetto, fare clic su Proprietà.
  3. Fare clic sulla scheda Debug.
  4. Deselezionare 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 inferiori. Per ulteriori informazioni, vedere Debugging and the Hosting Process.

In generale, quando il processo di hosting è disabilitato:

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