Freigeben über


XML-Befehlstabellendateien (VSCT) entwerfen

In einer XML-Befehlstabellendatei (VSCT) wird das Layout und die Darstellung von Befehlselementen für ein VSPackage-Element beschrieben. Befehlselemente umfassen Schaltflächen, Kombinationsfelder, Menüs, Symbolleisten und Gruppen von Befehlselementen. In diesem Artikel werden XML-Befehlstabellendateien beschrieben, wie sie sich auf Befehlselemente und Menüs auswirken und wie sie erstellt werden.

Befehle, Menüs, Gruppen und die VSCT-Datei

Die VSCT-Dateien sind um Befehle, Menüs und Befehlsgruppen organisiert. XML-Tags in der VSCT-Datei stellen jedes dieser Elemente zusammen mit anderen zugeordneten Elementen wie Befehlsschaltflächen, Befehlsplatzierung und Bitmaps dar.

Wenn Sie ein neues VSPackage erstellen, indem Sie die Visual Studio-Paketvorlage ausführen, generiert die Vorlage je nach Auswahl eine VSCT-Datei mit den erforderlichen Elementen für einen Menübefehl, ein Toolfenster oder einen benutzerdefinierten Editor. Diese VSCT-Datei kann dann geändert werden, um die Anforderungen eines bestimmten VSPackage zu erfüllen. Beispiele zum Ändern einer VSCT-Datei finden Sie unter Erweitern von Menüs und Befehlen.

Informationen zum Erstellen einer neuen, leeren VSCT-Datei finden Sie unter How to: Create a .vsct file. Nachdem Sie erstellt haben, fügen Sie der Datei XML-Elemente, Attribute und Werte hinzu, um das Befehlselementlayout zu beschreiben. Ein detailliertes XML-Schema finden Sie in der VSCT-XML-Schemareferenz.

Unterschiede zwischen CTC- und VSCT-Dateien

Während die Bedeutung hinter den XML-Tags in einer VSCT-Datei mit den Tags im nun veralteten CTC-Dateiformat identisch ist, ist ihre Implementierung etwas anders:

  • Das neue <externe> Tag ist der Ort, an dem Sie auf andere H-Dateien verweisen, die kompiliert werden sollen, z. B. auf diese Dateien für die Visual Studio-Symbolleiste.

  • Während VSCT-Dateien die Anweisung "/include " unterstützen, wie CTC-Dateien auch ein neues <Importelement> enthalten. Der Unterschied besteht darin, dass /include alle Informationen einbringt, während <der Import> nur die Namen einführt.

  • Während CTC-Dateien eine Headerdatei erfordern, in der Sie Ihre Präprozessordirektiven definieren, ist eine datei nicht für VSCT-Dateien erforderlich. Platzieren Sie stattdessen Die Direktiven in der Symboltabelle, die sich in den Symbolelementen> befindet, am unteren Rand der VSCT-Datei.<

  • VSCT-Dateien enthalten ein <Anmerkungstag> , mit dem Sie beliebige Informationen wie Notizen oder sogar Bilder einbetten können.

  • Werte werden als Attribute für das Element gespeichert.

  • Befehlskennzeichnungen können einzeln oder gestapelt gespeichert werden. IntelliSense funktioniert jedoch nicht bei gestapelten Befehlskennzeichnungen. Weitere Informationen zu Befehlskennzeichnungen finden Sie im CommandFlag-Element.

  • Sie können mehrere Typen angeben, z. B. geteilte Dropdowns, Kombinationen usw.

  • GUIDs werden nicht überprüft.

  • Jedes UI-Element verfügt über eine Zeichenfolge, die den text darstellt, der mit diesem angezeigt wird.

  • Das übergeordnete Element ist optional. Wenn dieser Wert nicht angegeben wird, wird der Wert "Group Unknown" verwendet.

  • Das Symbol-Argument ist optional.

  • Bitmap-Abschnitt: Dieser Abschnitt ist identisch mit einer CTC-Datei , mit der Ausnahme, dass Sie jetzt einen Dateinamen über Href angeben können, der vom vsct.exe-Compiler zur Kompilierungszeit abgerufen wird.

  • ResID: Die alte Bitmapressourcen-ID kann verwendet werden und funktioniert weiterhin wie in CTC-Dateien .

  • HRef: Eine neue Methode, mit der Sie einen Dateinamen für die Bitmapressource angeben können. Es wird davon ausgegangen, dass alle verwendet werden, sodass Sie den Abschnitt "Verwendet" weglassen können. Der Compiler sucht zuerst nach lokalen Ressourcen für die Datei, dann auf allen Net-Freigaben und allen ressourcen, die durch die Option "/I " definiert sind.

  • Keybinding: Sie müssen keinen Emulator mehr angeben. Wenn Sie einen angeben, geht der Compiler davon aus, dass der Editor und der Emulator identisch sind.

  • Keychord: Keychord wurde gelöscht. Das neue Format ist Key1,Mod1,Key2,Mod2. Sie können entweder eine Zeichen-, Hexadezimal- oder VK-Konstante angeben.

Der neue Compiler vsct.exe kompiliert sowohl .ctc- als auch .vsct-Dateien. Der alte ctc.exe Compiler erkennt oder kompiliert .vsct Dateien jedoch nicht.

Sie können den vsct.exe Compiler verwenden, um eine vorhandene CTO-Datei in eine VSCT-Datei zu konvertieren. Weitere Informationen finden Sie unter How to: Create a .vsct file from an existing .cto file.

Die VSCT-Dateielemente

Die Befehlstabelle weist die folgende Hierarchie und Elemente auf:

  • CommandTable-Element: Stellt alle Befehle, Menügruppen und Menüs dar, die dem VSPackage zugeordnet sind.

  • Extern-Element: Verweist auf alle externen H-Dateien, die Sie mit der VSCT-Datei zusammenführen möchten.

  • Include element: References any additional header (.h) files you want to compile with your .vsct file. Eine VSCT-Datei kann H-Dateien enthalten, die Konstanten enthalten, die Befehle, Menügruppen und Menüs definieren, die von der IDE oder einem anderen VSPackage bereitgestellt werden.

  • Commands-Element: Stellt alle einzelnen Befehle dar, die ausgeführt werden können. Jeder Befehl verfügt über die folgenden vier untergeordneten Elemente:

  • Menus-Element: Stellt alle Menüs und Symbolleisten im VSPackage dar. Menüs sind Container für Gruppen von Befehlen.

  • Groups-Element: Stellt alle Gruppen im VSPackage dar. Gruppen sind Sammlungen einzelner Befehle.

  • Buttons-Element: Stellt alle Befehlsschaltflächen und Menüelemente im VSPackage dar. Schaltflächen sind visuelle Steuerelemente, die Befehlen zugeordnet werden können.

  • Bitmaps-Element: Stellt alle Bitmaps für alle Schaltflächen im VSPackage dar. Bitmaps sind Bilder, die je nach Kontext neben oder auf den Befehlsschaltflächen angezeigt werden.

  • CommandPlacements-Element: Gibt zusätzliche Speicherorte an, an denen die einzelnen Befehle in den Menüs Ihres VSPackage platziert werden sollen.

  • VisibilityConstraints-Element: Gibt an, ob ein Befehl immer oder nur in bestimmten Kontexten angezeigt wird, z. B. wenn ein bestimmtes Dialogfeld oder Fenster angezeigt wird. Menüs und Befehle mit einem Wert für dieses Element werden nur angezeigt, wenn der angegebene Kontext aktiv ist. Das Standardverhalten besteht darin, den Befehl jederzeit anzuzeigen.

  • KeyBindings-Element: Gibt alle Tastenbindungen für die Befehle an. Das heißt, eine oder mehrere Tastenkombinationen, die gedrückt werden müssen, um den Befehl auszuführen, z. B. STRG+S.

  • UsedCommands-Element: Informiert die Visual Studio-Umgebung, dass der angegebene Befehl zwar durch anderen Code implementiert wird, wenn der aktuelle VSPackage aktiv ist, die Befehlsimplementierung bereitstellt.

  • Symbols-Element: Enthält die Symbolnamen und GUID-IDs für alle Befehle im Paket.

Entwurfsrichtlinien für VSCT-Dateien

Befolgen Sie diese Richtlinien, um eine VSCT-Datei erfolgreich zu entwerfen.

  • Befehle können nur in Gruppen platziert werden, Gruppen können nur in Menüs platziert werden, und Menüs können nur in Gruppen platziert werden. Nur Menüs werden tatsächlich in der IDE angezeigt, Gruppen und Befehle sind nicht.

  • Untermenüs können einem Menü nicht direkt zugewiesen werden, müssen aber einer Gruppe zugewiesen werden, die wiederum einem Menü zugewiesen ist.

  • Befehle, Untermenüs und Gruppen können einer übergeordneten Gruppe oder einem Menü mithilfe des übergeordneten Felds ihrer definierten Direktive zugewiesen werden.

  • Das Organisieren einer Befehlstabelle allein über die übergeordneten Felder in den Direktiven hat eine erhebliche Einschränkung. Die Direktiven, die Objekte definieren, können nur ein übergeordnetes Argument annehmen.

  • Zum Erneuten Verwenden von Befehlen, Gruppen oder Untermenüs muss eine neue Direktive verwendet werden, um eine neue Instanz des Objekts mit einem eigenen GUID:ID Paar zu erstellen.

  • Jedes GUID:ID Paar muss eindeutig sein. Das Erneute Verwenden eines Befehls, der z. B. in einem Menü, einer Symbolleiste oder in einem Kontextmenü platziert wurde, wird von der IOleCommandTarget Schnittstelle behandelt.

  • Befehle und Untermenüs können auch mehreren Gruppen zugewiesen werden, und Gruppen können mehreren Menüs mithilfe des Commands-Elements zugewiesen werden.

VSCT-Dateinotizen

Wenn Sie Änderungen an einer VSCT-Datei vornehmen, nachdem Sie sie kompiliert und in einer nativen Satelliten-DLL platziert haben, sollten Sie devenv.exe /setup /nosetupvstemplates ausführen. Dadurch werden die in der experimentellen Registrierung angegebenen VSPackage-Ressourcen erneut gelesen und die interne Datenbank, in der Visual Studio neu erstellt wird, beschrieben.

Während der Entwicklung können mehrere VSPackage-Projekte erstellt und in der experimentellen Registrierungsstruktur registriert werden, die zu verwirrender Unübersichtlichkeit in der IDE führen kann. Um dies zu beheben, können Sie die experimentelle Struktur auf die Standardeinstellungen zurücksetzen, um alle registrierten VSPackages und alle Änderungen zu entfernen, die sie möglicherweise an der IDE vorgenommen haben. Verwenden Sie zum Zurücksetzen der experimentellen Struktur das Tool CreateExpInstance.exe, das im Lieferumfang des Visual Studio SDK enthalten ist. Sie finden es unter:

%PROGRAMFILES(x86)%\Visual Studio\<version> SDK\VisualStudioIntegration\Tools\Bin\CreateExpInstance.exe

Führen Sie das Tool mit dem Befehl CreateExpInstance /Reset aus. Denken Sie daran, dass dieses Tool aus der experimentellen Struktur alle registrierten VSPackages entfernt, die normalerweise nicht mit Visual Studio installiert sind.