Могу ли я создать макрос Visual Studio для запуска определенного проекта в отладчике?
-
01-07-2019 - |
Вопрос
В моем проекте есть как клиентские, так и серверные компоненты в одном файле решения.Обычно у меня есть отладчик, настроенный на запуск их вместе при отладке, но часто бывает так, что я запускаю сервер вне отладчика, чтобы я мог запускать и останавливать клиент по мере необходимости при работе только с материалами на стороне клиента.(это намного быстрее).
Я пытаюсь избавить себя от необходимости копаться в обозревателе решений для запуска отдельных проектов и предпочел бы просто нажать кнопку на панели инструментов, которая вызывает макрос, запускающий отладчик для отдельных проектов (при этом оставляя отладку типа "F5" в покое для запуска обоих процессов).
Я попробовал записывать, но это на самом деле не привело ни к чему полезному.
Пока все, что мне удалось сделать, это найти элемент проекта в обозревателе решений:
Dim projItem As UIHierarchyItem
projItem = DTE.ToolWindows.SolutionExplorer.GetItem("SolutionName\ProjectFolder\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect)
(Это в общих чертах основано на том, как регистратор макросов пытался это сделать.Я не уверен, является ли навигация по объектной модели пользовательского интерфейса правильным подходом, или мне следует вместо этого рассмотреть объектную модель решения / проекта).
Решение
ОК.Похоже, это работает в большинстве контекстов пользовательского интерфейса (всех?) при условии, что решение загружено:
Sub DebugTheServer()
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("Solution\ServerFolder\ServerProject").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.Windows.Item(Constants.vsWindowKindOutput).Activate()
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance")
End Sub
Другие советы
Из надстройки C # для меня сработало следующее:
Dte.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate();
Dte.ToolWindows.SolutionExplorer.GetItem("SolutionName\\SolutionFolderName\\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect);