Tuningalarm – Visual Studio 2010 aufgemotzt (Teil 4)
Kommentare

Abb.2: Der Visual-Studio-Integration-Package-Assistent

Grundsätzlich gibt es drei große Schritte, die der Assistent bereitstellt:
Auswahl der Programmiersprache (C#, Visual Basic, C++)
Angabe von Basisinformationen:

Abb.2: Der Visual-Studio-Integration-Package-Assistent
Abb.2: Der Visual-Studio-Integration-Package-Assistent

Grundsätzlich gibt es drei große Schritte, die der Assistent bereitstellt:

  • Auswahl der Programmiersprache (C#, Visual Basic, C++)
  • Angabe von Basisinformationen: Package-Name, Version und Icon
  • Funktionalität: Menükommando (Name, Angabe des Kommandos (Abb. 3)), Werkzeugfenster (Name, Angabe des Kommandos) und Benutzerdefinierter Editor
Abb. 3: Package-Assistent: Festlegen des Menükommandonamens und der Kommando-ID
Abb. 3: Package-Assistent: Festlegen des Menükommandonamens und der Kommando-ID

Nach dem Erstellen eines Packages mit einem Menüeintrag finden sich im Projekt neben der bereits bekannten Manifest-Datei einige bis dato unbekannte Dateien wieder. Die wichtigsten von ihnen sind Folgende:

  • PkgCmdID.cs: Enthält eine statische Klasse mit Konstanten, die die von uns definierte Befehls-ID des Menüeintrags enthält.
  • vsct-Datei: Erhält standardmäßig den Namen des Projekts und die Dateiendung vsct. Sie enthält die Definition der Befehle, der Menüs und Menügruppen sowie deren Zuordnung zu bestehenden Menüs. Sie wird auch Befehlstabelle genannt.
  • Package-Datei: Erhält standardmäßig den Namen des Projekts, versehen mit dem Suffix Package, z. B. SearchPackage.cs. Die entsprechende Klasse erhält ebenfalls den Namen des Projekts sowie den Suffix Package. Sie erbt von Microsoft.VisualStudio.Shell.Package und erledigt für den Befehl die beiden im Folgenden aufgezeigten Dinge:

    Fügt man dem Projekt einen Menübefehl hinzu (Abb. 2), so erstellt Visual Studio 2010 in der Befehlstabelle bereits einen Eintrag, der eine Menügruppe für den neuen Befehl erstellt und diesen standardmäßig dem Werkzeugmenü hinzufügt. Listing 6 spiegelt das im XML-Abschnitt Groups wider.




     
  

Die Zuordnung zum Werkzeugmenü erfolgt mittels des Parent-Tags, und zwar durch Angabe der GUID des übergeordneten Menüs, und durch Angabe des Menüeintrags, dem unsere neue Menügruppe zugeordnet werden soll. Während guidSHLMainMenu bereits vorhanden und Teil von Visual Studio bzw. des SDKs ist, so wurde guidSearchCmdSet bei der Erstellung des Projekts in der Datei Guids.cs definiert. Beide sind Konstanten. IDM_VS_MENU_TOOLS dagegen gibt das Menü an, dem der neue Menüeintrag zugeordnet werden soll. Man kann die Zuordnung des Befehls verändern, indem das id-Attribut des Parent-Tags mit einer anderen Konstante gefüllt wird. Die komplette Liste der Konstanten findet sich in der Datei %VS_SDK_PATH%VisualStudioIntegrationCommonIncvsshlids.h.

Verändert sich also das Parent-Tag, sodass es folgendermaßen aussieht, , so wird der Befehl nicht mehr im Werkzeugmenü angezeigt, sondern im Kontextmenü des Solution Explorers, und zwar für alle Objekte, die dort erscheinen. Abbildung 4 zeigt den neu hinzugefügten Befehl, der für jedes Objekt (item) des Solution Explorers aufscheint (ausgenommen Ordner, Projekt- und Solution-Dateien).

Abb. 4: Neu hinzugefügter Befehl im Kontextmenü des Solution Explorers
Abb. 4: Neu hinzugefügter Befehl im Kontextmenü des Solution Explorers

Die Hauptklasse SearchPackage.css implementiert die von der MPF-Klasse Package vererbte Methode Initialize. In dieser Methode wird ein Menübefehl erstellt, dem dann zugleich eine Callback-Methode zugeordnet wird. Er erhält die bereits vorher erwähnte GUID (die in Guids.cs definiert ist). Bei jedem Anklicken des Menüeintrags wird die Callback-Methode aufgerufen (Listing 7).

private void MenuItemCallback(object sender, EventArgs e)
{
// Show a Message Box to prove we were here
IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));	
}  

Das Objekt mit der Bezeichnung uiShell wird standardmäßig von Visual Studio generiert. Von hier aus ist es möglich, auf die Shell, d. h. auf die grafische Benutzeroberfläche der IDE zuzugreifen. So kann man etwa Werkzeugfenster erstellen und Kontextmenüs oder Messageboxen anzeigen lassen. Hat man beispielsweise zum Zeitpunkt der Projekterstellung im Assistenten auch die Erstellung eines Werkzeugfensters in Auftrag gegeben, so befindet sich in der Standard-Callback-Funktion bereits ein Aufruf, der das Werkzeugfenster anzeigt.

Fazit

Die Erweiterungsmöglichkeiten von Visual Studio 2010 sind derart vielfältig, dass es unmöglich wäre, sie in nur einem Artikel alle im Detail zu behandeln. Der vorliegende Artikel hat versucht, einen Überblick über die Grundbestandteile von Erweiterungen und deren Interna zu geben. Dabei stechen als Erweiterungstypen vor allem jene des komplett erneuerten Editors hervor, die auf einfache Weise Anpassungen ermöglichen. Microsofts Vorlagen reichen aus, um einen Einblick in die Funktionsweise zu geben und gleichzeitig als Beispiel zu fungieren. Nicht zuletzt wird die Wiederverwendbarkeit durch die einfache Integration verschiedener Erweiterungstypen in einem Projekt (als Packages) gefördert. Und obendrein liefert Microsoft mit der experimentellen Instanz einen Sandkasten mit, in dem man nach Herzenslust mit seinen Erweiterungen spielen kann, bevor man sie auf einfache Art und Weise [1] der Öffentlichkeit zur Verfügung stellt.

Martin W. Angler hat in Bozen und Wien studiert und arbeitet derzeit als Softwareentwickler an der Europäischen Akademie Bozen. Er befasst sich mit der Entwicklung von .NET-basierten Webapplikationen und SharePoint-Anpassungen. Er führt ein Weblog unter http://angler.wordpress.com.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -