Mục đích của tập tin vshost.exe là gì?


483

Khi tôi tạo và biên dịch một "Xin chào, Thế giới!" ứng dụng trong C #, tôi nhận được ba tệp trong thư mục Debug ngoài exe chính (ví dụ HelloWorld.exe)

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

Mục đích nào làm cho các tập tin này phục vụ?

Câu trả lời:


416

Tính năng vshost.exe được giới thiệu với Visual Studio 2005 (để trả lời bình luận của bạn).

Mục đích của nó chủ yếu là làm cho việc gỡ lỗi khởi chạy nhanh hơn - về cơ bản đã có một quy trình với khung chạy, chỉ cần sẵn sàng tải ứng dụng của bạn ngay khi bạn muốn.

Xem bài viết MSDNbài đăng trên blog này để biết thêm thông tin.


29
Vì vậy, đó là lý do tại sao khi tôi chạy Console.Write (System.AppDomain.CurrentDomain.FriendlyName) từ trình gỡ lỗi, tôi nhận được app.vshost.exe và khi tôi chạy trực tiếp từ exe tôi nhận được đầu ra như app.exe
Milen

@Milen, msdn.microsoft.com/en-us/l Library / ms242202.aspx đã đề cập đến kết quả khác nhau của AppDomain.CienDomain.FriendlyName có và không có quá trình máy chủ.
Thomson

2
Nếu các tệp vschost và .pdb tồn tại cho mục đích gỡ lỗi, thì tại sao chúng vẫn được đưa vào khi tôi biên dịch trong Bản phát hành?
iliketocode

1
Tôi đoán họ đã xóa nó trong Visual Studio 2017
Felipe Fujiy Pessoto


62

Tệp vshost.exe là tệp thực thi được chạy bởi Visual Studio (tệp thực thi của máy chủ Visual Studio). Đây là tệp thực thi có liên kết đến Visual Studio và cải thiện việc gỡ lỗi.

Khi bạn phân phối ứng dụng của mình cho người khác, bạn không sử dụng các tệp vshost.exe hoặc .pdb (cơ sở dữ liệu gỡ lỗi).


Tôi nhớ chúng tôi đã không có một thực thi như vậy trong VS2003 (nhưng chúng tôi đã có điểm dừng). bạn có thể giải thích về điều đó không?
Mehrdad Afshari

1
Hơn nữa, tệp kê khai là siêu dữ liệu về ứng dụng thường được liên kết với tệp thực thi. Tệp .pdb là Cơ sở dữ liệu gỡ lỗi di động và chứa thông tin gỡ lỗi về tệp thực thi được biên dịch, giống như điểm nào trong tệp thực thi tương ứng với dòng nào trong mã.
Joey

3
Quá trình máy chủ VS chỉ được sử dụng để cải thiện việc gỡ lỗi - nhưng nó không cho phép gỡ lỗi.
Daniel Brückner

23

Thêm vào, bạn có thể tắt việc tạo các tệp vshost cho cấu hình Bản dựng phát hành của mình và bật nó cho Debug .

Các bước

  • Thuộc tính dự án > Gỡ lỗi > Cấu hình (Phát hành)> Vô hiệu hóa quy trình lưu trữ Visual Studio
  • Thuộc tính dự án > Gỡ lỗi > Cấu hình (Gỡ lỗi)> Kích hoạt quy trình lưu trữ Visual Studio

Ảnh chụp màn hình từ VS2010

Tài liệu tham khảo

  1. MSDN Cách: Vô hiệu hóa quá trình lưu trữ
  2. Quá trình lưu trữ MSDN (vshost.exe)

Trích từ MSDN Cách: Vô hiệu hóa quá trình lưu trữ

Các cuộc gọi đến một số API nhất định có thể bị ảnh hưởng khi quy trình lưu trữ được bật. Trong những trường hợp này, cần phải vô hiệu hóa quá trình lưu trữ để trả về kết quả chính xác.

Để vô hiệu hóa quá trình lưu trữ

  1. Mở một dự án thực thi trong Visual Studio. Các dự án không tạo ra các tệp thực thi (ví dụ: thư viện lớp hoặc các dự án dịch vụ) không có tùy chọn này.
  2. Trên menu Project , bấm Properties .
  3. Nhấp vào tab Gỡ lỗi .
  4. Xóa hộp kiểm Bật quy trình lưu trữ Visual Studio .

Khi quá trình lưu trữ bị vô hiệu hóa, một số tính năng gỡ lỗi không khả dụng hoặc giảm hiệu suất. Để biết thêm thông tin, hãy xem Gỡ lỗi và Quy trình lưu trữ .

Nói chung, khi quá trình lưu trữ bị vô hiệu hóa:

  • Thời gian cần thiết để bắt đầu gỡ lỗi các ứng dụng .NET Framework tăng lên.
  • Đánh giá biểu hiện thời gian thiết kế là không có sẵn.
  • Gỡ lỗi tin cậy một phần là không có sẵn.

10

Tôi không chắc chắn, nhưng tôi tin rằng đó là một tối ưu hóa gỡ lỗi. Tuy nhiên, tôi thường tắt nó (xem các thuộc tính Gỡ lỗi cho dự án) và tôi không nhận thấy bất kỳ sự chậm trễ nào và tôi thấy không có giới hạn nào khi nói đến việc gỡ lỗi.


"Bảo vệ" là gì? Tham khảo cho một người dùng với một trong những câu trả lời ở đây? Thứ gì khác? Bạn có thể cập nhật câu trả lời của mình không (ví dụ với một liên kết trực tiếp, vì tên người dùng có thể thay đổi bất cứ lúc nào)?
Peter Mortensen

Tôi nghĩ rằng đây là một tham chiếu đến một câu trả lời khác, nhưng đây là vào ngày 09 vì vậy hãy tha thứ cho tôi nếu tôi không nhớ chi tiết.
Brian Rasmussen

2

Nó dường như là một quá trình khung chạy dài để gỡ lỗi (để giảm thời gian tải?). Tôi phát hiện ra rằng khi bạn khởi động ứng dụng của mình hai lần từ trình gỡ lỗi thì thường quy trình vshost.exe sẽ được sử dụng. Nó chỉ dỡ tất cả các DLL do người dùng tải trước. Điều này thực hiện những điều kỳ quặc nếu bạn đang loay hoay với các móc API từ các quy trình được quản lý.


1
Quá trình liên tục cũng gây ra ngoại lệ (vi phạm truy cập) khi dự án của tôi có một số mã để thực hiện P / Gọi. Vấn đề biến mất sau khi tôi vô hiệu hóa quá trình máy chủ.
Thomson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.