2 Stimmen

Addin zur Erweiterung des Projektmappen-Explorers mit "Entsprechende Lösung öffnen", wenn verfügbar?

Stellen Sie sich eine Ordnerstruktur vor, die mehr als 200 Lösungsdateien für Projekte enthält, die alle zu einer Software gehören. Die meisten von ihnen erzeugen gemeinsame Bibliotheken, auf die in anderen Projekten verwiesen wird, die in eigenen Lösungen enthalten sind.

Wäre es nicht wunderbar, wenn es eine Möglichkeit gäbe, mit der rechten Maustaste auf eine solche referenzierte Assembly im Projektmappen-Explorer zu klicken und dann einen Kontextmenüeintrag wie "Projektmappe öffnen" und "Projektmappe in einer neuen Visual Studio-Instanz öffnen" (so etwas in der Art) zu haben?

Damit dies funktioniert, sollte das Addin mit einer Art Basisverzeichnis konfiguriert werden. Von dort aus muss es eine Sammlung aller verfügbaren Lösungsdateien und der darin enthaltenen Projekte erstellen. Wenn ein Verweis mit der rechten Maustaste angeklickt wird, sollte es die Projektdateien nach der entsprechenden Ausgabe durchsuchen und - falls gefunden - die Menüpunkte zum direkten Öffnen der entsprechenden Lösung präsentieren (vielleicht könnten diese Informationen auch vorab abgefragt werden).

Nun... hat jemand von Ihnen bereits ein solches Addin erstellt? Kennt jemand zufällig ein Addin, das so etwas bereits tut?

Wenn keine dieser Fragen mit "Ja" beantwortet wird: Kann mir jemand einen Tipp geben, wie ich das Kontextmenü des Lösungsexplorers auf der Grundlage von festgelegten Vorbedingungen erweitern kann?

0voto

Maslow Punkte 17969

Afaik können Sie dies nicht mit einer VS MEF-Erweiterung tun, aber es ist wahrscheinlich nicht so schwierig, mit einem VS Add-in zu tun.

  1. Verwenden Sie MZTools Beispiele/Vorlagen, um den Teil zu schreiben, der Ihr Menü zur entsprechenden Befehlsleiste hinzufügt (das ist das Kontextmenü-Popup, das die Befehle des Lösungsexplorers enthält). Die Beispiele, die ich einfügte, waren Solution y Project . Ich kann mir vorstellen, dass es auch eine CommandBar namens Reference . Im folgenden Code ApplicationObject ist vom Typ EnvDTE Hier ist ein Code für die Suche nach der benötigten Befehlsleiste:

        private void IterateAllCommandBars( )
    {
        var commandBars =(CommandBars)ApplicationObject.CommandBars;
        Debug.Indent( );
        foreach (CommandBar commandBar in commandBars)
        {
            Debug.WriteLine(commandBar.Name);
        }
        Debug.Unindent( );
    }
  2. Wenn Ihre Erweiterung geladen ist (normalerweise in OnStartupComplete ) können Sie dann nach Ihren Vorbedingungen suchen und ein Wörterbuch einrichten, das den Verweis auf den Lösungsweg abbildet.

  3. Verwenden Sie den QueryStatus-Aufruf, der in Ihrem Add-In aufgerufen wird, um das Menü zu aktivieren/deaktivieren, je nachdem, welcher Verweis ausgewählt ist. Zum Beispiel erhalte ich das ausgewählte Projekt, falls vorhanden:

    private static Project GetProject(DTE applicationObject)
    {
        if (applicationObject.Solution==null||applicationObject.Solution.Projects==null||applicationObject.Solution.Projects.Count<1)
            return null;
        if (applicationObject.SelectedItems.Count==1&&applicationObject.SelectedItems.Item(1).Project!=null)
            return applicationObject.SelectedItems.Item(1).Project;
        return null;
    }
  4. Führen Sie den Befehl aus, den Sie aufrufen möchten, wenn der Benutzer auf eine gültige Option klickt. Ich bin nicht sicher, wie oder ob Sie die Lösung in der vorhandenen VS-Instanz öffnen können, aber das Öffnen in einer neuen VS-Instanz wäre einfach. Process.Start(ProjectFullPath); oder das könnte SolutionFullPath sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X