Posso criar uma macro do Visual Studio para iniciar um projeto específico no depurador?

Meu projeto tem componentes cliente e servidor no mesmo arquivo de solução. Eu geralmente tenho o depurador configurado para iniciá-los juntos durante a depuração, mas geralmente é o caso em que inicio o servidor fora do depurador para que eu possa iniciar e parar o cliente conforme necessário ao trabalhar somente com o lado do cliente. (isso é muito mais rápido).

Eu estou tentando salvar o incômodo de bisbilhotar no Solution Explorer para iniciar projetos individuais e prefiro apenas um botão na barra de ferramentas que chama uma macro que inicia o depurador para projetos individuais (deixando a depuração de tipo "F5" sozinha para iniciar ambos processess).

Eu tentei gravar, mas isso não resultou em nada de útil.

Até agora tudo o que consegui fazer é localizar o item de projeto no gerenciador de soluções:

 Dim projItem As UIHierarchyItem

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

(Isso é baseado livremente em como o gravador de macro tentou fazê-lo. Não tenho certeza se navegar pelo modelo de objeto de interface do usuário é a abordagem correta ou se eu deveria estar procurando passar pelo modelo de objeto Solution/Project).

0
adicionado
Visualizações: 1

2 Respostas

Está bem. Isso parece funcionar na maioria dos contextos da interface do usuário (todos?), Desde que a solução seja carregada:

 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
adicionado

De um suplemento C#, o seguinte funcionou para mim:

Dte.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate();
Dte.ToolWindows.SolutionExplorer.GetItem("SolutionName\\SolutionFolderName\\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect);
0
adicionado
Eu estou dizendo que ele deve funcionar em qualquer suplemento do Visual Studio.
adicionado o autor Erwin Mayer, fonte
Não, é um pouco mais complicado do que obter o objeto DTE se o seu projeto não for um VS Add in. Não tenho certeza de qual é a sua pergunta, mas provavelmente você deve abrir uma nova ao invés de comentar essa resposta.
adicionado o autor Erwin Mayer, fonte
Vejo que você já encontrou minha essência aqui: gist.github.com/mayerwin/82301024371e9c555d24 Ajudar você a conseguir o que você precisa.
adicionado o autor Erwin Mayer, fonte
Qual C# Add-in?
adicionado o autor vendettamit, fonte
Pode estar faltando algumas referências além do EnvDtE e do EnvDte80. Sim?
adicionado o autor vendettamit, fonte
Sim .. mas isso não estava funcionando com o .Net 4.5 devido à falta de namespaces e classes. Eu encontrei outra solução em SO aqui para 4.5.
adicionado o autor vendettamit, fonte