¿Puedo crear una macro de Visual Studio para iniciar un proyecto específico en el depurador?

Mi proyecto tiene componentes de cliente y servidor en el mismo archivo de solución. Por lo general, tengo el depurador configurado para iniciarlos juntos cuando se depuran, pero a menudo es el caso donde inicio el servidor fuera del depurador para poder iniciar y detener el cliente según sea necesario cuando trabajo solo en el lado del cliente. (esto es mucho más rápido).

Estoy tratando de ahorrarme la molestia de hurgar en Solution Explorer para comenzar proyectos individuales y preferiría simplemente pegar un botón en la barra de herramientas que llama a una macro que inicia el depurador para proyectos individuales (dejando la depuración de tipo "F5" sola para iniciar ambos procesos).

Intenté grabar, pero eso no resultó en nada útil.

Hasta ahora, todo lo que he logrado hacer es localizar el elemento del proyecto en el explorador de soluciones:

 Dim projItem As UIHierarchyItem

 projItem = DTE.ToolWindows.SolutionExplorer.GetItem("SolutionName\ProjectFolder\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect)

(Esto se basa en la forma en que el grabador de macros intentó hacerlo. No estoy seguro de si navegar por el modelo de objetos de la interfaz de usuario es el enfoque correcto o si, en su lugar, debería considerar el modelo de objetos de solución/proyecto).

0
agregado
Puntos de vista: 1

2 Respuestas

De acuerdo. Esto parece funcionar desde la mayoría de los contextos UI (¿todos?) Siempre que se cargue la solución:

 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
0
agregado

Desde un complemento de C#, lo siguiente funcionó para mí:

Dte.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate();
Dte.ToolWindows.SolutionExplorer.GetItem("SolutionName\\SolutionFolderName\\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect);
0
agregado
Estoy diciendo que debería funcionar desde cualquier complemento de Visual Studio.
agregado el autor Erwin Mayer, fuente
No, es un poco más complicado que eso obtener el objeto DTE si su proyecto no es un complemento VS. No estoy seguro de cuál es su pregunta, pero probablemente deba abrir una nueva en lugar de comentar esta respuesta.
agregado el autor Erwin Mayer, fuente
Veo que ya encontraste mi esencia aquí: gist.github.com/mayerwin/82301024371e9c555d24 debería ayudarlo a lograr lo que necesita
agregado el autor Erwin Mayer, fuente
¿Qué complemento C #?
agregado el autor vendettamit, fuente
Puede ser que me faltan algunas referencias aparte de EnvDtE y EnvDte80. ¿Sí?
agregado el autor vendettamit, fuente
Sí ... pero eso no funcionaba con .Net 4.5 debido a espacios de nombres y clases faltantes. Encontré otra solución en SO aquí para 4.5.
agregado el autor vendettamit, fuente