Pot crea o macrocomandă Visual Studio pentru a lansa un proiect specific în depanator?

Proiectul meu are componente client și server în același fișier soluție. De obicei, debuggerul este setat să le pornească împreună atunci când se depanează, dar este adesea cazul în care pornesc serverul în afara programului de depanare, astfel încât să pot porni și opri clientul după cum este necesar atunci când lucrați doar pe chestiuni de la client. (aceasta este mult mai rapidă).

Încerc să mă salvez de dificultatea de a încerca în Solution Explorer pentru a începe proiecte individuale și mai degrabă să lipiți un buton de pe bara de instrumente care cheamă o macrocomandă care pornește depanatorul pentru proiecte individuale (în timp ce lasă tipul de depanare "F5" porniți ambele procese).

Am încercat să înregistrez, dar asta nu a avut drept rezultat nimic util.

Până acum, tot ce am reușit să fac este să găsesc elementul proiectului în exploratorul de soluții:

 Dim projItem As UIHierarchyItem

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

(Acest lucru se bazează în mod liber pe modul în care înregistratorul macro a încercat să o facă. Nu sunt sigur dacă navigarea în modelul obiect UI este abordarea corectă sau dacă ar trebui să mă uit la trecerea prin modelul de obiect Solution/Project).

0

2 răspunsuri

O.K. Acest lucru pare să funcționeze din cele mai multe contexte UI (toate?) Cu condiția ca soluția să fie încărcată:

 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
adăugat

Dintr-un add-in C#, următoarele au lucrat pentru mine:

Dte.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate();
Dte.ToolWindows.SolutionExplorer.GetItem("SolutionName\\SolutionFolderName\\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect);
0
adăugat
Spun că ar trebui să funcționeze din orice add-in pentru Visual Studio.
adăugat autor Erwin Mayer, sursa
Nu este un pic mai complicat decat sa obtineti obiectul DTE daca proiectul dumneavoastra nu este un add-in VS. Nu sunteti sigur ce este intrebarea dvs., dar probabil ar trebui sa deschideti unul nou, in loc sa comentati acest raspuns.
adăugat autor Erwin Mayer, sursa
Văd că ați găsit deja ideea mea aici: gist.github.com/mayerwin/82301024371e9c555d24 ar trebui vă ajută să obțineți ceea ce aveți nevoie.
adăugat autor Erwin Mayer, sursa
Ce C# Add-in?
adăugat autor vendettamit, sursa
Poate că mi-ar lipsi unele referințe în afară de EnvDtE și EnvDte80. Da?
adăugat autor vendettamit, sursa
Da .. dar asta nu a fost de lucru cu. Net 4.5 din cauza lipsa namespaces și clase. Am găsit o altă soluție pe deci aici pentru 4.5.
adăugat autor vendettamit, sursa