Какова цель файла vshost.exe?

483

Когда я создаю и компилирую «Hello, World!» приложение в C #, я получаю три файла в папке отладки, кроме основного EXE-файла (например, HelloWorld.exe)

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

Какую цель служат эти файлы?

Милен
источник

Ответы:

416

Функция vshost.exe была введена в Visual Studio 2005 (чтобы ответить на ваш комментарий).

Цель этого состоит в основном в том, чтобы ускорить запуск отладки - в основном уже есть процесс с запущенной платформой, просто готовый загрузить ваше приложение, как только вы захотите.

См. Эту статью MSDN и этот блог для получения дополнительной информации.

Джон Скит
источник
29
Так что причина , почему , когда я бегу Console.Write (System.AppDomain.CurrentDomain.FriendlyName) из отладчика, я получаю app.vshost.exe и когда я бегу прямо из ехе я получаю выход в app.exe
Милен
@Milen, msdn.microsoft.com/en-us/library/ms242202.aspx упомянули другой результат AppDomain.CurrentDomain.FriendlyName с и без хост-процесса.
Томсон
2
Если файлы vschost и .pdb существуют для целей отладки, то почему они все еще включаются, когда я компилирую в Release?
iliketocode
1
Я предполагаю, что они удалили это в Visual Studio 2017
Felipe Fujiy Pessoto
175
  • .exe - «нормальный» исполняемый файл

  • .vshost.exe - специальная версия исполняемого файла для облегчения отладки; см MSDN для деталей

  • .pdb - База данных программы с символами отладки

  • .vshost.exe.manifest - своего рода файл конфигурации, содержащий в основном зависимости от библиотек

Даниэль Брюкнер
источник
62

Файл vshost.exe - это исполняемый файл, запускаемый Visual Studio (исполняемый файл узла Visual Studio). Это исполняемый файл, который ссылается на Visual Studio и улучшает отладку.

Когда вы распространяете свое приложение среди других, вы не используете файлы vshost.exe или .pdb (база данных отладки).

Уилл Эддинс
источник
Я помню, у нас не было такого исполняемого файла в VS2003 (но у нас были точки останова). Можете ли вы уточнить это?
Мехрдад Афшари
1
Кроме того, манифест представляет собой метаданные о приложении, которые обычно также связываются с исполняемым файлом. Файл .pdb представляет собой Portable Debug Database и содержит отладочную информацию о скомпилированном исполняемом файле, например, какая точка в исполняемом файле соответствует какой строке в коде.
Джои
3
Процесс хоста VS используется только для улучшения отладки, но не включает отладку.
Даниэль Брюкнер,
23

Кроме того, вы можете отключить создание файлов vshost для вашей конфигурации сборки выпуска и включить его для отладки .

меры

  • Свойства проекта > Отладка > Конфигурация (выпуск)> Отключить процесс размещения Visual Studio
  • Свойства проекта > Отладка > Конфигурация (Debug)> Включить процесс размещения Visual Studio

Скриншот из VS2010

Ссылка

  1. MSDN Как: отключить процесс хостинга
  2. Процесс размещения MSDN (vshost.exe)

Выдержка из MSDN Как: отключить процесс хостинга

Вызовы определенных API могут быть затронуты, когда включен процесс хостинга. В этих случаях необходимо отключить процесс хостинга, чтобы получить правильные результаты.

Чтобы отключить процесс хостинга

  1. Откройте исполняемый проект в Visual Studio. Проекты, которые не производят исполняемые файлы (например, библиотеки классов или проекты служб), не имеют этой опции.
  2. В меню Проект выберите Свойства .
  3. Перейдите на вкладку « Отладка ».
  4. Снимите флажок Включить процесс размещения Visual Studio .

Когда процесс хостинга отключен, некоторые функции отладки недоступны или снижается производительность. Для получения дополнительной информации см. Раздел «Отладка и процесс хостинга» .

В общем, когда хостинг отключен:

  • Время, необходимое для начала отладки приложений .NET Framework, увеличивается.
  • Оценка выражения во время разработки недоступна.
  • Частичная доверительная отладка недоступна.
SimplyInk
источник
10

Я не уверен, но я считаю, что это оптимизация отладки. Тем не менее, я обычно отключаю его (см. Свойства отладки для проекта), и я не замечаю никакого замедления и не вижу никаких ограничений, когда речь идет об отладке.

Брайан Расмуссен
источник
Что такое "гвардия"? Ссылка на пользователя с одним из ответов здесь? Что-то другое? Можете ли вы обновить свой ответ (например, с помощью прямой ссылки, поскольку имена пользователей могут измениться в любое время)?
Питер Мортенсен
Я думаю, что это была ссылка на другой ответ, но это было в 09, так что прости меня, если я не помню детали.
Брайан Расмуссен
2

Похоже, это длительный процесс для отладки (чтобы уменьшить время загрузки?). Я обнаружил, что когда вы дважды запускаете приложение из отладчика, часто используется один и тот же процесс vshost.exe. Сначала он выгружает все загруженные пользователем библиотеки DLL. Это делает странные вещи, если вы дурачитесь с хуками API от управляемых процессов.

Джошуа
источник
1
Постоянный процесс также вызывает исключение (нарушение прав доступа), когда в моем проекте есть код для выполнения P / Invoke. Проблема исчезла после того, как я отключил хост-процесс.
Томсон