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?

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.


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,


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).


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.

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.


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.