Как отлаживать расширения Visual Studio

93

Я просто пишу расширение VSIX для Visual Studio 2010 и не могу понять, как его отлаживать.

Один из очевидных методов - вывод сообщений. Шаблон расширения использует Trace.WriteLine(). Но где его вывод?

Lu55
источник

Ответы:

185

Расширения Visual Studio можно отлаживать, как и любое другое приложение. Вам просто нужно настроить отладку для запуска devenv с загруженным расширением. Попробуйте следующее

  • Щелкните проект правой кнопкой мыши и выберите Свойства.
  • Перейдите на вкладку отладки

Щелкните переключатель для Start External Program. Направьте его на двоичный файл devenv.exe. На моей машине он расположен по адресу

C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

На машинах, отличных от x64, вы можете удалить часть «(x86)».

Затем установите для аргументов командной строки значение /rootsuffix Exp. Это указывает Visual Studio использовать экспериментальный куст вместо обычного куста конфигурации. По умолчанию расширения VSIX после сборки регистрируются в экспериментальном кусте.

Теперь вы можете нажать F5, и он запустит Visual Studio с вашим VSIX в качестве доступного расширения.

ДжаредПар
источник
спасибо за этот ответ, решил проблему одним ударом. Весьма признателен!
Ричард Гриффитс
@JaredPar - есть ли способ указать расширению vs2012, чтобы оно регистрировалось в экспериментальном улье предварительного просмотра vs2015?
Srikanth Venugopalan
1
Похоже, это работает только в том случае, если версии, которые вы используете для отладки и тестирования, одинаковы. Таким образом, вы не можете выполнить отладку в 2013 году и запустить расширение в 2015 году. @SrikanthVenugopalan
Мария Инес Парнисари
@miparnisari - да, похоже. Хотя это немного неудобно, если вы поддерживаете несколько версий.
Srikanth Venugopalan
2
Привет, что вы имеете в виду, это запустит VS с моим VSIX в качестве "доступного расширения"? Где мне найти доступные расширения? Когда я перехожу в Инструменты -> Расширения и обновления, я вижу только «Установлено», «В сети» и «Обновления».
pabrams
54

Принятый ответ @JaredPar технически верен, но страдает тем фактом, что вам нужно переделывать его для каждого разработчика, каждый раз, когда вы получаете новую копию кода, и каждый раз, когда csproj.userфайл удаляется. Когда вы это сделаете, настройки сохранятся в csproj.userфайле.

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

Щелкните правой кнопкой мыши и выгрузите проект, затем щелкните еще раз правой кнопкой мыши и отредактируйте csprojфайл файла проекта. В XML добавьте следующее к первому PropertyGroup, например, сразу после TargetFramework.

<StartAction>Program</StartAction>
<StartProgram>$(DevEnvDir)\devenv.exe</StartProgram>
<StartArguments>/rootsuffix Exp</StartArguments>

Это дает следующие преимущества:

  • Он настраивает его для отладки и выпуска
  • Он запускает любую версию Visual Studio, которую вы используете в настоящее время.
  • Он проверен в системе контроля версий, поэтому каждому разработчику не нужно помнить, как это делать :)

Как заявляет @MBulli в комментариях, если вы внесли изменения в принятый ответ, удалите свой *.csproj.userфайл, потому что настройки в нем переопределят те, которые вы добавили в основной csprojфайл.

Роб Проус
источник
6
Обязательно удалите файл * .csproj.user, так как пользовательские настройки имеют приоритет над настройками проекта.
MBulli
Отличный ответ, спасибо! Намного эффективнее принятого.
Зверев Евгений
Отлично работает для vs 2019
x0n
2

Метод OutputWindowHelper.OutputString записывает в область окна вывода «Общие» (Ctrl Alt o). Я добавил эту строку в свои ссылки .csproj, чтобы получить это в VS 2013

<Reference Include="Microsoft.VisualStudio.Services.Integration, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

Также см. Этот ответ .

tcb
источник
Примечание. OutputWindowHelper не существует в Visual Studio 2015. Машина с только VS2015 выдаст ошибку, если это будет вызвано. См. Также github.com/landofjoe/NuspecPackager/issues/1
Quango,
0

Если вы пытаетесь отлаживать UnitTestExtension, вам также следует присоединить отладчик к процессам vstest. *. Exe, как описано здесь . В противном случае вы можете увидеть точку останова активации, но отладчик никогда не ударит ее.

smkanadl
источник