Entwicklungsumgebung: Visual Studio Extensions werden unabhängig

Extensions für Microsofts Entwicklungsumgebungen können nun ein User Interface in einem separaten Prozess steuern.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 1 Beitrag

(Bild: donatas1205 / Shutterstock.com)

Von
  • Rainald Menge-Sonnentag

Microsoft hat das vor einem Jahr gestartete neue Modell zum Schreiben von Extensions für Visual Studio erweitert. Mit dem frischen Update lassen sich Erweiterungen mit einem eigenen User Interface erstellen. Außerdem können die in einem unabhängigen Prozess laufenden Extensions neuerdings Tooltips und Benachrichtigungen über den Fortschritt von Aktionen anzeigen.

Mit dem Start der zweiten Phase ändert das Projekt zum Schreiben von Visual-Studio-Erweiterungen seinen Namen von VSExtensibility zu VisualStudio.Extensibility. Das GitHub-Repository mit den Ankündigungen und der Dokumentation trägt allerdings weiterhin den alten Namen.

Motivation für die Einführung des neuen Modells im September 2021 war, dass die Erweiterungen anders als die klassischen Visual Studio Extensions in einem eigenständigen Prozess laufen, um die Stabilität der Entwicklungsumgebung nicht zu beeinträchtigen. Nachdem sich das erste Release auf Funktionen für den Editor beschränkt hat, lassen sich mit der neuen Variante eigene User Interfaces erstellen.

VisualStudio.Extensibility bringt ein eigenes Remote-UI-Framework für das Erstellen von Oberflächen mit WPF-Komponenten (Windows Presentation Foundation) mit, deren Programmlogik im separaten Prozess läuft. Entwicklerinnen und Entwickler können damit beispielsweise unabhängige Toolfenster erstellen. Remote UI setzt auf das Entwurfsmuster Model-View-ViewModel (MVVM), um die Darstellung der UI-Komponenten von der zugehörigen Logik zu trennen.

Der Visual-Studio-Prozess kümmert sich um die WPF-Elemente, während die Programmlogik im Extension-Host-Prozess läuft.

(Bild: Microsoft)

Für die Beschreibung des UI setzt das Framework auf XAML (Extensible Application Markup Language). Die Programmlogik der Erweiterung läuft im separaten Extension-Prozess, während die Visual-Studio-Prozess sich um die Darstellung der Komponenten kümmert. Die Kommunikation zwischen den Prozessen erfolgt asynchron.

Das Remote-UI-Framework bringt Funktionen zum Anzeigen von Toolfenstern mit, darunter die Standardvorgaben für die Positionierung und Regeln, um das Fenster kontextbezogen anzuzeigen beziehungsweise zu schließen.

Das aktuelle Release von VisualStudio.Extensibility führt zudem Befehle zum Anzeigen von Tooltips ein und erlaubt das Einbinden eigener Images jenseits derjenigen im Visual Studio Image Catalog.

Schließlich können die Erweiterungen neuerdings Benachrichtigungen über den Fortschritt von Aktionen, die im Hintergrund laufen, anzeigen und dabei Usern die Option geben, eine langwierige Aktion abzubrechen.

Ein optionaler Button stoppt Prozesse, die eine Extension im Hintergrund ausführt.

(Bild: Microsoft)

Auch die Extensions für den Editor bekommen ein paar Ergänzungen, nachdem sich das erste Release auf Funktionen wie Linter und Formatierungstools konzentriert hatte. Neuerdings lassen sich der Inhaltstyp und zugehörige Dateiendungen definieren, wie folgendes Beispiel aus der Dokumentation zeigt:

using Microsoft.VisualStudio.Extensibility.Editor;

[assembly: ContentTypeDefinition("markdown")]
[assembly: ContentTypeBaseDefinition("markdown", 
                                     baseContentTypeName: "text")]
[assembly: FileExtensionMapping("markdown", fileExtension: ".md")]
[assembly: FileExtensionMapping("markdown", fileExtension: ".mdk")]
[assembly: FileExtensionMapping("markdown", 
                                fileExtension: ".markdown")]

Visual Studio führt die neuen Definitionen für den Kontexttyp mit denen der klassischen Visual Studio Extensions zusammen.

AppliesTo() und AppliesToPattern() legen zudem fest, für welche Dokumenttypen beziehungsweise Dateipfade und -typen eine Extension gilt:

[AppliesTo(ContentType = "CSharp")]
[AppliesToPattern(Pattern = "**/tests/*.cs")]

Weitere Details zu VisualStudio.Extensibility lassen sich dem Visual-Studio-Blog entnehmen. Details zur Entwicklung und die Dokumentation finden sich im zugehörigen GitHub-Repository.

(rme)