2009-04-21 349 views
437

當我創建和編譯一個 「Hello World」,在C#應用程序,我得到在遠離主exe文件Debug文件夾中的三個文件(如HelloWorld.exe的)vshost.exe文件的用途是什麼?

  1. HelloWorld.vshost.exe
  2. 的HelloWorld .PDB
  3. HelloWorld.vshost.exe.manifest

這些文件的目的是什麼呢?

回答

382

VS2005引入了vshost.exe功能(回答您的評論)。

它的目的主要是使調試更快啓動 - 基本上已經有一個框架運行的過程,只要你願意,就準備好加載你的應用程序。

請參閱this MSDN articlethis blog post瞭解更多信息。

58

vshost.exe文件是由Visual Studio(Visual Studio主機可執行文件)運行的可執行文件。這是鏈接到Visual Studio並改進調試的可執行文件。

將應用程序分發給其他人時,不要使用vshost.exe或.pdb(調試數據庫)文件。

+0

我記得我們在VS2003中沒有這樣的可執行文件(但我們確實有斷點)。你能詳細說明一下嗎? – 2009-04-21 19:28:59

+1

此外,清單是關於通常也鏈接到可執行文件的應用程序的元數據。 .pdb文件是一個可移植調試數據庫,包含有關編譯可執行文件的調試信息,例如可執行文件中的哪一點對應於代碼中的哪一行。 – Joey 2009-04-21 19:29:42

+3

VS主機進程僅用於改進調試 - 但不啓用調試。 – 2009-04-21 19:42:18

158
  • .exe文件 - '正常' 的可執行

  • .vshost.exe - 可執行文件,以幫助調試運行的一個特殊版本;見MSDN的細節

  • .PDB - 在Program Data Base與調試符號

  • .vshost.exe.manifest - 一種主要包含configuration file依存信息庫

10

我不知道,但我相信這是一個調試優化。但是,我通常關閉它(請參閱項目的調試屬性),並且我沒有注意到任何放緩,並且在調試時我沒有看到任何限制,因此Guard在調試時並不需要它。

2

它似乎是一個長時間運行的調試框架過程(以減少加載時間?)。我發現當你從調試器啓動應用程序兩次時,通常會使用相同的vshost.exe進程。它只是首先卸載所有用戶加載的DLL。如果你從託管進程中調用API鉤子,這會做一些奇怪的事情。

10

添加上,你可以關閉的vshost文件的創建爲您發佈構建配置,並將它啓用調試

步驟

  • 項目屬性>調試>配置(發佈)>禁用的Visual Studio宿主進程
  • 項目屬性>調試>配置(調試)>啓用Visual Studio託管流程

Screenshot from VS2010

參考

  1. MSDN How to: Disable the Hosting Process
  2. MSDN Hosting Process (vshost.exe)

摘自MSDN How to: Disable the Hosting Process

呼叫至某些API可能會受到影響,當託管的凝固酶原ss已啓用。在這些情況下,有必要禁用主機進程以返回正確的結果。

要禁用託管進程

  1. 打開Visual Studio中的可執行項目。不生成可執行文件的項目(例如,類庫或服務項目)不具有此選項。
  2. 項目菜單上,單擊屬性
  3. 單擊調試選項卡。
  4. 清除啓用Visual Studio託管過程複選框。

當主機進程被禁用時,幾個調試功能不可用或者體驗性能下降。有關更多信息,請參閱Debugging and the Hosting Process

在一般情況下,當宿主進程被禁用:

  • 開始調試.NET Framework應用程序所需時間會增加。
  • 設計時錶達式評估不可用。
  • 部分信任調試不可用。