Apa tujuan dari file vshost.exe?

483

Saat saya membuat dan menyusun "Halo, Dunia!" aplikasi di C #, saya mendapatkan tiga file di folder Debug selain dari exe utama (misalnya HelloWorld.exe)

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

Tujuan apa yang dilayani oleh file-file ini?

Milen
sumber

Jawaban:

416

Fitur vshost.exe diperkenalkan dengan Visual Studio 2005 (untuk menjawab komentar Anda).

Tujuannya sebagian besar untuk membuat peluncuran debugging lebih cepat - pada dasarnya sudah ada proses dengan kerangka kerja berjalan, hanya siap memuat aplikasi Anda segera seperti yang Anda inginkan.

Lihat artikel MSDN ini dan posting blog ini untuk informasi lebih lanjut.

Jon Skeet
sumber
29
Jadi adalah alasan mengapa ketika saya menjalankan Console.Write (System.AppDomain.CurrentDomain.FriendlyName) dari debugger, saya mendapatkan app.vshost.exe dan ketika saya menjalankan langsung dari exe saya mendapatkan output sebagai app.exe
Milen
@Milen, msdn.microsoft.com/en-us/library/ms242202.aspx menyebutkan hasil yang berbeda dari AppDomain.CurrentDomain.FriendlyName dengan dan tanpa proses host.
Thomson
2
Jika file vschost dan .pdb ada untuk tujuan debugging, lalu mengapa mereka masih disertakan saat saya kompilasi di Release?
iliketocode
1
Saya kira mereka menghapusnya di Visual Studio 2017
Felipe Fujiy Pessoto
175
  • .exe - executable 'normal'

  • .vshost.exe - versi khusus yang dapat dieksekusi untuk membantu debug; lihat MSDN untuk detailnya

  • .pdb - Program Data Base dengan simbol debug

  • .vshost.exe.manifest - sejenis file konfigurasi yang sebagian besar berisi dependensi pada pustaka

Daniel Brückner
sumber
62

File vshost.exe adalah executable yang dijalankan oleh Visual Studio (executable host Visual Studio). Ini adalah executable yang menautkan ke Visual Studio dan meningkatkan debugging.

Saat Anda mendistribusikan aplikasi Anda ke orang lain, Anda tidak menggunakan file vshost.exe atau .pdb (debug database).

Will Eddins
sumber
Saya ingat kami tidak memiliki executable seperti itu di VS2003 (namun kami memang memiliki breakpoints). Dapatkah Anda menguraikan itu?
Mehrdad Afshari
1
Lebih jauh lagi, manifes adalah metadata tentang aplikasi yang biasanya juga terhubung ke executable. File .pdb adalah Portable Debug Database dan berisi informasi debug tentang executable yang dikompilasi, seperti titik mana dalam executable yang sesuai dengan baris kode mana.
Joey
3
Proses VS host hanya digunakan untuk meningkatkan debug - tetapi tidak memungkinkan debug.
Daniel Brückner
23

Menambahkan, Anda dapat mematikan pembuatan file vshost untuk konfigurasi build Release Anda dan mengaktifkannya untuk Debug .

Langkah

  • Properti Proyek > Debug > Konfigurasi (Rilis)> Nonaktifkan proses hosting Visual Studio
  • Properti Proyek > Debug > Konfigurasi (Debug)> Aktifkan proses hosting Visual Studio

Tangkapan layar dari VS2010

Referensi

  1. MSDN Cara: Nonaktifkan Proses Hosting
  2. Proses Hosting MSDN (vshost.exe)

Kutipan dari MSDN Cara: Nonaktifkan Proses Hosting

Panggilan ke API tertentu dapat terpengaruh saat proses hosting diaktifkan. Dalam kasus ini, perlu untuk menonaktifkan proses hosting untuk mengembalikan hasil yang benar.

Untuk menonaktifkan proses hosting

  1. Buka proyek yang dapat dieksekusi di Visual Studio. Proyek yang tidak menghasilkan executable (misalnya, perpustakaan kelas atau proyek layanan) tidak memiliki opsi ini.
  2. Pada menu Proyek , klik Properti .
  3. Klik tab Debug .
  4. Kosongkan kotak centang Aktifkan proses hosting Visual Studio .

Ketika proses hosting dinonaktifkan, beberapa fitur debug tidak tersedia atau mengalami penurunan kinerja. Untuk informasi lebih lanjut, lihat Debugging dan Proses Hosting .

Secara umum, ketika proses hosting dinonaktifkan:

  • Waktu yang dibutuhkan untuk mulai debugging .NET Framework meningkat aplikasi.
  • Evaluasi ekspresi desain-waktu tidak tersedia.
  • Debugging kepercayaan sebagian tidak tersedia.
Cukup tinta
sumber
10

Saya tidak yakin, tapi saya yakin ini adalah optimasi debugging. Namun, saya biasanya mematikannya (lihat properti Debug untuk proyek ini) dan saya tidak melihat adanya pelambatan dan saya tidak melihat batasan dalam hal debugging.

Brian Rasmussen
sumber
Apa itu "Penjaga"? Referensi ke pengguna dengan salah satu jawaban di sini? Sesuatu yang lain Dapatkah Anda memperbarui jawaban Anda (misalnya dengan tautan langsung, karena nama pengguna dapat berubah kapan saja)?
Peter Mortensen
Saya pikir ini referensi ke jawaban lain, tapi ini di 09 jadi maafkan saya jika saya tidak ingat detailnya.
Brian Rasmussen
2

Tampaknya ini merupakan proses kerangka kerja yang berjalan lama untuk debugging (untuk mengurangi waktu muat?). Saya menemukan bahwa ketika Anda menjalankan aplikasi dua kali dari debugger sering kali proses vshost.exe yang sama akan digunakan. Itu hanya membongkar semua DLL yang dimuat pengguna terlebih dahulu. Ini melakukan hal-hal aneh jika Anda bermain-main dengan kait API dari proses yang dikelola.

Joshua
sumber
1
Proses persisten juga menyebabkan pengecualian (pelanggaran akses) ketika proyek saya memiliki beberapa kode untuk melakukan P / Invoke. Masalahnya hilang setelah saya menonaktifkan proses host.
Thomson