Was ist der Zweck der Datei vshost.exe?

483

Wenn ich ein "Hallo Welt!" Anwendung in C #, ich bekomme drei Dateien im Debug-Ordner neben der Haupt-Exe (zB HelloWorld.exe)

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

Welchen Zweck erfüllen diese Dateien?

Milen
quelle

Antworten:

416

Die Funktion vshost.exe wurde mit Visual Studio 2005 eingeführt (um Ihren Kommentar zu beantworten).

Der Zweck besteht hauptsächlich darin, den Start des Debuggens zu beschleunigen. Grundsätzlich läuft bereits ein Prozess mit dem Framework, der gerade bereit ist, Ihre Anwendung zu laden, sobald Sie dies wünschen.

Weitere Informationen finden Sie in diesem MSDN-Artikel und in diesem Blogbeitrag .

Jon Skeet
quelle
29
Aus diesem Grund erhalte ich beim Ausführen von Console.Write (System.AppDomain.CurrentDomain.FriendlyName) vom Debugger die Datei app.vshost.exe und beim Ausführen direkt von der Exe die Ausgabe als app.exe
Milen
@Milen, msdn.microsoft.com/en-us/library/ms242202.aspx erwähnte das unterschiedliche Ergebnis von AppDomain.CurrentDomain.FriendlyName mit und ohne Hostprozess.
Thomson
2
Wenn vschost- und .pdb-Dateien zu Debugging-Zwecken vorhanden sind, warum sind sie dann beim Kompilieren in Release noch enthalten?
Iliketocode
1
Ich denke, sie haben es in Visual Studio 2017 entfernt
Felipe Fujiy Pessoto
175
  • .exe - die 'normale' ausführbare Datei

  • .vshost.exe - eine spezielle Version der ausführbaren Datei zur Unterstützung des Debuggens; Einzelheiten finden Sie unter MSDN

  • .pdb - die Programmdatenbank mit Debug-Symbolen

  • .vshost.exe.manifest - eine Art Konfigurationsdatei, die hauptsächlich Abhängigkeiten von Bibliotheken enthält

Daniel Brückner
quelle
62

Die Datei vshost.exe ist die ausführbare Datei, die von Visual Studio ausgeführt wird (ausführbare Datei des Visual Studio-Hosts). Dies ist die ausführbare Datei, die eine Verknüpfung zu Visual Studio herstellt und das Debuggen verbessert.

Wenn Sie Ihre Anwendung an andere verteilen, verwenden Sie nicht die Dateien vshost.exe oder .pdb (Debug-Datenbank).

Will Eddins
quelle
Ich erinnere mich, dass wir in VS2003 keine solche ausführbare Datei hatten (aber wir hatten Haltepunkte). Können Sie das näher erläutern?
Mehrdad Afshari
1
Darüber hinaus besteht das Manifest aus Metadaten der Anwendung, die normalerweise auch mit der ausführbaren Datei verknüpft werden. Die PDF-Datei ist eine tragbare Debug-Datenbank und enthält Debug-Informationen zur kompilierten ausführbaren Datei, z. B. welcher Punkt in der ausführbaren Datei welcher Codezeile entspricht.
Joey
3
Der VS-Hostprozess wird nur zur Verbesserung des Debuggens verwendet, aktiviert jedoch nicht das Debuggen.
Daniel Brückner
23

Hinzufügen, können Sie die Erstellung von vshost - Dateien für Ihre ausschalten Veröffentlichung Build - Konfiguration und haben es für aktivierte Debug .

Schritte

  • Projekteigenschaften > Debug > Konfiguration (Release)> Deaktivieren Sie den Visual Studio-Hosting-Prozess
  • Projekteigenschaften > Debug > Konfiguration (Debug)> Aktivieren Sie den Visual Studio-Hosting-Prozess

Screenshot von VS2010

Referenz

  1. MSDN Gewusst wie: Deaktivieren Sie den Hosting-Prozess
  2. MSDN-Hosting-Prozess (vshost.exe)

Auszug aus MSDN Gewusst wie: Deaktivieren Sie den Hosting-Prozess

Aufrufe bestimmter APIs können betroffen sein, wenn der Hosting-Prozess aktiviert ist. In diesen Fällen muss der Hosting-Prozess deaktiviert werden, um die korrekten Ergebnisse zurückzugeben.

So deaktivieren Sie den Hosting-Prozess

  1. Öffnen Sie ein ausführbares Projekt in Visual Studio. Projekte, die keine ausführbaren Dateien erstellen (z. B. Klassenbibliothek oder Serviceprojekte), verfügen nicht über diese Option.
  2. Klicken Sie im Menü Projekt auf Eigenschaften .
  3. Klicken Sie auf die Registerkarte Debug .
  4. Deaktivieren Sie das Aktivieren des Visual Studio - Hosting - Prozess Kontrollkästchen.

Wenn der Hosting-Prozess deaktiviert ist, sind mehrere Debugging-Funktionen nicht verfügbar oder es tritt eine Leistungsminderung auf. Weitere Informationen finden Sie unter Debuggen und Hosting .

Im Allgemeinen, wenn der Hosting-Prozess deaktiviert ist:

  • Die Zeit, die zum Debuggen von .NET Framework-Anwendungen benötigt wird, nimmt zu.
  • Die Auswertung des Ausdrucks zur Entwurfszeit ist nicht verfügbar.
  • Teilweises Vertrauens-Debugging ist nicht verfügbar.
SimplyInk
quelle
10

Ich bin mir nicht sicher, aber ich glaube, es ist eine Debugging-Optimierung. Normalerweise deaktiviere ich es jedoch (siehe Debug-Eigenschaften für das Projekt) und bemerke keine Verlangsamung und sehe keine Einschränkungen beim Debuggen.

Brian Rasmussen
quelle
Was ist "Wache"? Verweis auf einen Benutzer mit einer der Antworten hier? Etwas anderes? Können Sie Ihre Antwort aktualisieren (z. B. mit einem direkten Link, da sich Benutzernamen jederzeit ändern können)?
Peter Mortensen
Ich denke, dies war ein Hinweis auf eine andere Antwort, aber dies war im Jahr 09, also vergib mir, wenn ich mich nicht an die Details erinnere.
Brian Rasmussen
2

Es scheint ein langjähriger Framework-Prozess zum Debuggen zu sein (um die Ladezeiten zu verkürzen?). Ich habe festgestellt, dass beim zweimaligen Starten Ihrer Anwendung über den Debugger häufig derselbe Prozess vshost.exe verwendet wird. Es werden nur zuerst alle vom Benutzer geladenen DLLs entladen. Dies macht seltsame Dinge, wenn Sie mit API-Hooks von verwalteten Prozessen herumalbern.

Joshua
quelle
1
Der persistente Prozess verursacht auch Ausnahmen (Zugriffsverletzungen), wenn mein Projekt Code für P / Invoke enthält. Das Problem verschwand, nachdem ich den Host-Prozess deaktiviert hatte.
Thomson