Kann ich ein Visual Studio-Makro erstellen, um ein bestimmtes Projekt im Debugger zu starten?

Mein Projekt enthält Client- und Serverkomponenten in derselben Lösungsdatei. Ich habe normalerweise den Debugger gesetzt, um sie beim Debuggen zusammen zu starten, aber es ist oft der Fall, wo ich den Server außerhalb des Debuggers starte, so dass ich den Client starten und stoppen kann, wenn ich an clientseitigen Dingen arbeite. (Das ist viel schneller).

Ich versuche mir die Mühe zu ersparen, im Projektmappen-Explorer herumzustochern, um einzelne Projekte zu starten, und stecke lieber eine Schaltfläche in die Werkzeugleiste, die einen Makro aufruft, der den Debugger für einzelne Projekte startet (während das Debugging vom Typ "F5" alleine bleibt) starte beide Prozesse).

Ich habe versucht, aufzunehmen, aber das hat nicht wirklich etwas Sinnvolles ergeben.

Bis jetzt ist es mir nur gelungen, den Projektgegenstand im Solution Explorer zu finden:

 Dim projItem As UIHierarchyItem

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

(Dies basiert grob darauf, wie der Makrorecorder es versucht hat. Ich bin mir nicht sicher, ob das Navigieren durch das UI-Objektmodell der richtige Ansatz ist oder ob ich stattdessen das Solution/Project-Objektmodell durchgehen sollte).

0

2 Antworten

OK. Dies scheint von den meisten UI-Kontexten (alle?) Zu funktionieren, sofern die Lösung geladen ist:

 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
hinzugefügt

Von einem C# Add-In funktionierte folgendes für mich:

Dte.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate();
Dte.ToolWindows.SolutionExplorer.GetItem("SolutionName\\SolutionFolderName\\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect);
0
hinzugefügt
Ich sage, dass es von jedem Visual Studio Add-in funktionieren sollte.
hinzugefügt der Autor Erwin Mayer, Quelle
Nein, es ist etwas komplizierter, das DTE-Objekt zu erhalten, wenn es sich bei Ihrem Projekt nicht um ein VS Add-In handelt. Sie wissen nicht, was Ihre Frage ist, aber Sie sollten wahrscheinlich eine neue öffnen, anstatt diese Antwort zu kommentieren.
hinzugefügt der Autor Erwin Mayer, Quelle
Ich sehe, du hast meinen Kern bereits hier gefunden: gist.github.com/mayerwin/82301024371e9c555d24 sollte es sein Ihnen helfen, das zu erreichen, was Sie brauchen.
hinzugefügt der Autor Erwin Mayer, Quelle
Welches C# Add-In?
hinzugefügt der Autor vendettamit, Quelle
Möglicherweise fehlen mir einige Referenzen abgesehen von EnvDtE und EnvDte80. Ja?
hinzugefügt der Autor vendettamit, Quelle
Ja .. aber das funktionierte nicht mit .Net 4.5 aufgrund fehlender Namespaces und Klassen. Ich fand eine andere Lösung auf SO hier für 4.5.
hinzugefügt der Autor vendettamit, Quelle