Do czego służy plik vshost.exe?

483

Kiedy tworzę i kompiluję „Witaj, świecie!” aplikacji w C #, dostaję trzy pliki w folderze debugowania oprócz głównego pliku exe (np. HelloWorld.exe)

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

W jakim celu służą te pliki?

Milen
źródło

Odpowiedzi:

416

Funkcja vshost.exe została wprowadzona wraz z Visual Studio 2005 (aby odpowiedzieć na twój komentarz).

Ma to głównie na celu przyspieszenie uruchamiania debugowania - w zasadzie już działa proces z frameworkiem, gotowy do załadowania aplikacji tak szybko, jak chcesz.

Zobacz ten artykuł MSDN i ten post na blogu, aby uzyskać więcej informacji.

Jon Skeet
źródło
29
Tak więc jest to powód, dla którego po uruchomieniu Console.Write (System.AppDomain.CurrentDomain.FriendlyName) z debugera otrzymuję app.vshost.exe, a kiedy uruchamiam bezpośrednio z exe, otrzymuję dane wyjściowe jako app.exe
Milen
@Milen, msdn.microsoft.com/en-us/library/ms242202.aspx wspomniał o innym wyniku AppDomain.CurrentDomain.FriendlyName z procesem hosta i bez niego.
Thomson,
2
Jeśli pliki vschost i .pdb istnieją do celów debugowania, to dlaczego nadal są uwzględniane podczas kompilacji w wersji?
iliketocode
1
Myślę, że usunęli go w Visual Studio 2017
Felipe Fujiy Pessoto,
175
  • .exe - „normalny” plik wykonywalny

  • .vshost.exe - specjalna wersja pliku wykonywalnego ułatwiająca debugowanie; zobacz MSDN dla szczegółów

  • .pdb - baza danych programu z symbolami debugowania

  • .vshost.exe.manifest - rodzaj pliku konfiguracyjnego zawierającego głównie zależności od bibliotek

Daniel Brückner
źródło
62

Plik vshost.exe to plik wykonywalny uruchamiany przez program Visual Studio (plik wykonywalny hosta programu Visual Studio). Jest to plik wykonywalny, który łączy się z Visual Studio i usprawnia debugowanie.

Gdy dystrybuujesz swoją aplikację do innych osób, nie używasz plików vshost.exe ani .pdb (baza danych debugowania).

Will Eddins
źródło
Pamiętam, że nie mieliśmy takiego pliku wykonywalnego w VS2003 (ale mieliśmy punkty przerwania). Czy możesz to rozwinąć?
Mehrdad Afshari
1
Ponadto manifestem są metadane dotyczące aplikacji, które zwykle są również łączone z plikiem wykonywalnym. Plik .pdb jest przenośną bazą danych debugowania i zawiera informacje debugowania na temat skompilowanego pliku wykonywalnego, np. Który punkt w pliku wykonywalnym odpowiada linii w kodzie.
Joey,
3
Proces hosta VS służy wyłącznie do usprawnienia debugowania - ale nie umożliwia debugowania.
Daniel Brückner
23

Dodając, możesz wyłączyć tworzenie plików vshost dla konfiguracji kompilacji wydania i włączyć ją w celu debugowania .

Kroki

  • Właściwości projektu > Debugowanie > Konfiguracja (wydanie)> Wyłącz proces hostowania Visual Studio
  • Właściwości projektu > Debugowanie > Konfiguracja (debugowanie)> Włącz proces hostowania Visual Studio

Zrzut ekranu z VS2010

Odniesienie

  1. MSDN Instrukcje: Wyłącz proces hostingu
  2. Proces hostowania MSDN (vshost.exe)

Fragment z MSDN Jak: wyłączyć proces hostingu

Połączenia z niektórymi interfejsami API mogą mieć wpływ na włączenie procesu hostingu. W takich przypadkach konieczne jest wyłączenie procesu hostingu, aby zwrócić prawidłowe wyniki.

Aby wyłączyć proces hostingu

  1. Otwórz projekt wykonywalny w Visual Studio. Projekty, które nie produkują plików wykonywalnych (na przykład biblioteki klas lub projekty usług) nie mają tej opcji.
  2. W menu Projekt kliknij polecenie Właściwości .
  3. Kliknij kartę Debugowanie .
  4. Wyczyść pole wyboru Włącz proces hostowania programu Visual Studio .

Gdy proces hostingu jest wyłączony, kilka funkcji debugowania jest niedostępnych lub występuje obniżona wydajność. Aby uzyskać więcej informacji, zobacz Debugowanie i proces hostingu .

Ogólnie, gdy proces hostingu jest wyłączony:

  • Wydłuża się czas potrzebny do rozpoczęcia debugowania aplikacji .NET Framework.
  • Ocena wyrażenia w czasie projektowania jest niedostępna.
  • Debugowanie częściowego zaufania jest niedostępne.
SimplyInk
źródło
10

Nie jestem pewien, ale uważam, że jest to optymalizacja debugowania. Jednak zwykle wyłączam go (zobacz Właściwości debugowania dla projektu) i nie zauważam żadnego spowolnienia i nie widzę żadnych ograniczeń, jeśli chodzi o debugowanie.

Brian Rasmussen
źródło
Co to jest „Strażnik”? Odniesienie do użytkownika z jedną z odpowiedzi tutaj? Coś innego? Czy możesz zaktualizować swoją odpowiedź (np. Z bezpośrednim linkiem, ponieważ nazwy użytkowników mogą się zmienić w dowolnym momencie)?
Peter Mortensen
Myślę, że to było odniesienie do innej odpowiedzi, ale było to w 09, więc wybacz mi, jeśli nie pamiętam szczegółów.
Brian Rasmussen
2

Wydaje się, że jest to długo działający proces do debugowania (aby skrócić czas ładowania?). Odkryłem, że po dwukrotnym uruchomieniu aplikacji z debuggera będzie używany ten sam proces vshost.exe. Najpierw zwalnia wszystkie załadowane przez użytkownika biblioteki DLL. Robi to dziwne rzeczy, jeśli wygłupiasz się z haczykami API zarządzanych procesów.

Jozuego
źródło
1
Trwały proces powoduje również wyjątek (naruszenie dostępu), gdy mój projekt ma kod do wykonania P / Invoke. Problem zniknął po wyłączeniu procesu hosta.
Thomson,