ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Mai 2020 (Version 1.46)

Update 1.46.1: Das Update behebt diese Probleme.

Downloads: Windows: x64 Arm64 | Mac: Intel | Linux: deb rpm tarball snap


Willkommen zur Mai 2020-Version von Visual Studio Code.

Wenn Sie diese Release Notes online lesen möchten, gehen Sie zu Updates auf code.visualstudio.com.

Barrierefreiheit

Meilenstein für uns wieder hilfreiches Feedback von unserer Community erhalten, das uns geholfen hat, viele Barrierefreiheitsprobleme zu identifizieren und zu beheben.

  • Die Statusleiste unterstützt jetzt die Tastaturnavigation. Wenn der Fokus über Nächsten Teil fokussieren (F6) in der Statusleiste liegt, bewegt die Pfeilnavigation zwischen den Einträgen der Statusleiste.
  • Um die Auswahl per Tastatur zu erleichtern, gibt es vier neue Befehle
    • Auswahlanker setzen (⌘K ⌘B (Windows, Linux Ctrl+K Ctrl+B))
    • Von Anker bis Cursor auswählen (⌘K ⌘K (Windows, Linux Ctrl+K Ctrl+K))
    • Auswahlanker abbrechen (Escape)
    • Zum Auswahlanker navigieren
  • Aktivitätsleisteneinträge haben nun eine tab-Rolle und den entsprechenden aria-expanded-Status.
  • Aria-Labels von Editoren vermitteln nun korrekt die folgenden Editor-Status: angeheftet, Vorschau und schreibgeschützt.

Workbench

Flexibles Layout

Seit mehreren Iterationen kündigen wir Fortschritte bei der Flexibilisierung unseres Layouts an. Mit dieser Version sind diese Funktionen nun für den allgemeinen Gebrauch bereit. Nachfolgend eine Übersicht über diese Funktionen.

Ansichten zwischen Seitenleiste und Panel verschieben

Vielleicht ziehen Sie es vor, eine Ansicht aus der Seitenleiste im Panel oder umgekehrt zu platzieren. Um dies zu tun, können Sie nun eine Ansicht per Kopfzeile oder eine ganze Gruppe per Symbol oder Titel von ihrer aktuellen Position ziehen und an den gewünschten Ort verschieben. Von der Tastatur aus können die Befehle Ansicht: Ansicht verschieben (workbench.action.moveView) und Ansicht: Fokussierte Ansicht verschieben (workbench.action.moveFocusedView) verwendet werden.

Nachfolgend eine Demonstration, wie Suchen in das Panel und Probleme in die Seitenleiste gezogen werden.

Moving Views Between Side Bar and Panel

Suchen ins Panel und Probleme in die Aktivitätsleiste ziehen

Theme: GitHub Light

Zuvor gab es eine Einstellung zum Verschieben der Suchansicht von der Seitenleiste in das Panel, und nun ist diese Einstellung obsolet, da Drag-and-Drop stattdessen verwendet werden kann.

Ansichten gruppieren

Möglicherweise möchten Sie auch einige Ansichten zusammen gruppieren, die von verschiedenen Erweiterungen stammen oder bei denen Sie der Meinung sind, dass die Standardgruppen von integrierten Ansichten nicht ganz richtig für Sie sind. Sie können Ansichten sowohl in bestehende Gruppen verschieben als auch neue Gruppen für eine ausgewählte Menge von Ansichten erstellen. Dies funktioniert übergreifend für die Seitenleiste und das Panel, genau wie zuvor. Nachfolgend einige Beispiele dafür.

Moving Timeline from Explorer to Source Control

Ziehen der Timeline-Ansicht vom Explorer nach Source Control

Side By Side Debug Console and Watch View

Ziehen der Watch-Ansicht aus der Run-Seitenleiste, um sie neben der Debug-Konsole im Panel zu platzieren

Custom History Group

Erstellen einer benutzerdefinierten Verlaufs-Gruppe in der Seitenleiste und im Panel mit Timeline und GitLens

Theme: GitHub Light

Zurücksetzen von Ansichtspositionen

Ansichten und Gruppen von Ansichten können über ihre Kontextmenüs auf ihre Standardpositionen zurückgesetzt werden. Wenn eine Ansicht von ihrer Standardposition verschoben wurde, gibt es einen Eintrag Position zurücksetzen, um sie wieder an ihren ursprünglichen Platz zu verschieben. Es gibt auch Befehle Ansicht: Fokussierte Ansichtsposition zurücksetzen (workbench.action.resetFocusedViewLocation) und Ansicht: Ansichtspositionen zurücksetzen (workbench.action.resetViewLocations) zum Zurücksetzen aller Ansichten und Gruppen auf ihre Standardpositionen.

Für Erweiterungsautoren, die Ansichten oder Ansichtscontainer beisteuern

Wenn Ansichten im Workbench verschoben werden, müssen sie manchmal anders dargestellt werden, entweder mit einem Symbol oder zusätzlichem Kontext, wenn sie nicht an ihrem Standardort sind. Beim Beisteuern einer Ansicht können Autoren nun eine icon-Eigenschaft und einen contextualTitle angeben. Wenn diese nicht angegeben werden, werden sie standardmäßig auf das Symbol und den Titel des Ansichtscontainers gesetzt, zu dem sie beitragen.

Schließlich können Erweiterungsautoren nun Ansichtscontainer direkt zum panel beisteuern, anstatt zur activitybar, wie im Tree View Extension Guide beschrieben.

Tabs anpinnen

Sie können nun Tabs entweder über das Kontextmenü oder mit dem neuen Befehl workbench.action.pinEditor (⌘K ⇧Enter (Windows, Linux Ctrl+K Shift+Enter)) anpinnen.

Pin Tabs

Theme: GitHub Light

Angepinnte Tabs haben eine Reihe nützlicher Funktionen, um Ihnen wichtige Dateien zu markieren

  • Angepinnte Tabs erscheinen immer vor nicht angepinnten Tabs.
  • Sie scrollen nicht aus der Ansicht, wenn Sie viele Tabs geöffnet haben.
  • Sie schließen sich nicht, wenn Sie Befehle wie Andere schließen verwenden.
  • Sie schließen sich nicht einmal, wenn Sie ein festgelegtes Limit für die Anzahl geöffneter Editoren überschreiten.

Sie können Tabs auch per Drag-and-Drop verschieben, um den angepinnten Status zu ändern.

Angepinnte Tabs schrumpfen optisch auf die Größe eines Icons (oder zeigen den ersten Buchstaben des Dateinamens, wenn Icons deaktiviert sind), um Platz zu sparen. Wenn Sie den schmutzigen Indikator bei angepinnten Tabs sehen möchten, können Sie workbench.editor.highlightModifiedTabs: true einstellen.

Hinweis: Wir denken weiterhin über andere Möglichkeiten nach, angepinnte Tabs darzustellen. Wenn Sie eine Meinung haben, teilen Sie Ihre Ideen gerne in den bestehenden Issues für die Anzeige einer sekundären Tab-Leiste oder eine Einstellung, um mehr Kontext für angepinnte Tabs anzuzeigen.

Such-Editor

Es gibt mehrere neue Optionen zur Konfiguration der Erstellung von Such-Editoren

  • search.searchEditor.defaultNumberOfContextLines - Konfigurieren Sie, wie viele Kontextzeilen ein Such-Editor standardmäßig anzeigt.
  • search.searchEditor.reusePriorSearchConfiguration - Verwenden Sie die Konfiguration des zuletzt aktiven Such-Editors beim Erstellen eines neuen Such-Editors wieder.
  • Unterstützung für die Übergabe von Such-Editor-Konfigurationsvariablen in Tastenkombinationsargumenten (Parameterdetails).

Explorer automatisch enthüllen, ohne Scrollen zu erzwingen

Es gibt eine neue Option focusNoScroll für die Einstellung explorer.autoReveal. Wenn Sie diese Option verwenden, wählt der Explorer beim Öffnen von Dateien automatisch diese aus, scrollt aber nicht, um sie in der Explorer-Ansicht anzuzeigen.

Sanftes Scrollen für Listen und Bäume

Die Aktivierung der Einstellung workbench.list.smoothScrolling macht das Scrollen in Listen und Bäumen auf Hardware, der es an sanftem Scrollen mangelt (z. B. diskretes Mausrad unter Windows), deutlich sanfter.

Smooth scrolling

Sash-Größenkonfiguration

Sie können nun die Einstellung workbench.sash.size verwenden, um die Größe des Feedbackbereichs in Pixeln des Ziehbereichs zwischen Ansichten/Editoren zu konfigurieren. Stellen Sie sie auf einen größeren Wert ein, wenn Sie das Gefühl haben, dass es schwierig ist, Ansichten mit der Maus zu skalieren.

Schriftgröße im Screencast-Modus

Die neue Einstellung screencastMode.fontSize ermöglicht es Ihnen, die Schriftgröße in Pixeln zu konfigurieren, die im Screencast-Modus verwendet wird.

VS Code erlaubt nun das direkte Öffnen von URL-Links zu beliebigen GitHub-Remotes in Ihrem Arbeitsbereich. Zusätzlich sind, wenn Sie sich mit GitHub angemeldet haben, alle Links zu Seiten unter Ihrem GitHub-Profil vertrauenswürdig.

Editor

Dateiübergreifendes Rückgängigmachen für geschlossene Dateien

Es ist nun möglich, Dateiübergreifend rückgängig zu machen, auch wenn die Dateien zwischenzeitlich geschlossen wurden. Die bearbeiteten Dateien werden wieder geöffnet und eine dateiübergreifende Operation, wie z. B. eine Umbenennung von Symbolen, wird in allen betroffenen Dateien rückgängig gemacht.

Ungewöhnliche Zeilenabschlüsse

VS Code erkennt derzeit CR (Carriage Return), LF (Line Feed) und CRLF als Zeilenabschlüsse. Einige Programmiersprachen haben unterschiedliche Definitionen dafür, was einen Zeilenabschluss ausmacht. Dies variiert je nach Sprache, z. B. sind LS (Line Separator) und PS (Paragraph Separator) Zeilenabschlüsse in C# und JavaScript, aber nicht in HTML, PHP oder Java. Diese Unterschiede bei den Zeilenenden können Probleme verursachen, wenn VS Code mit einem Sprachserver kommuniziert, da verschiedene Konzepte zwischen VS Code und dem Sprachserver über (line;char)-Koordinaten kommuniziert werden. Wenn unterschiedliche Definitionen für Zeilenabschlüsse vorhanden sind, kann dies zu unterschiedlichen Zuordnungen von Zeilen und Positionen in der Datei führen.

Beim Öffnen einer Datei prüft VS Code nun, ob LS oder PS in der geöffneten Datei vorhanden sind, und fordert zur Zustimmung auf, diese Zeichen zu entfernen. Diese ungewöhnlichen Zeilenabschlüsse sind in der Praxis selten und werden höchstwahrscheinlich versehentlich beim Kopieren und Einfügen in den Quellcode eingefügt.

Integriertes Terminal

Die Link-Vorschau des integrierten Terminals vom letzten Monat hat die alte Implementierung ersetzt. Die neue Link-Implementierung ermöglicht nun

  • Verbesserte Erkennung von Web- und file://-Links durch die Link-Erkennung des Editors.
  • Unterstützung für Ordner-Links, die entweder den Ordner im Explorer öffnen oder ein neues VS Code-Fenster öffnen.
  • Unterschiedliche Link-Aktionen für verschiedene Link-Typen, wobei auf "Wort"-Links zurückgegriffen wird, die den Arbeitsbereich durchsuchen (basierend auf der Einstellung terminal.integrated.wordSeparators).
  • Ähnliche Link-Hervorhebung und Hover-Erfahrung wie im Editor.

Terminal with various links

Thema: Topaz (Dim)

Aufgaben

Fortsetzung der jüngsten Leistungsverbesserungen bei Aufgaben, Build-Aufgabe ausführen fragt Erweiterungen nicht mehr immer nach ihren Aufgaben. Wenn Sie eine Standard-Build-Aufgabe in der tasks.json Ihres Ordners konfiguriert haben, versucht Build-Aufgabe ausführen nur, diese Aufgabe aufzulösen, anstatt alle Aufgaben von allen Erweiterungen zu finden, bevor die Standard-Build-Aufgabe ausgeführt wird.

Quellcodeverwaltung

Im Terminal öffnen

Sie können nun ein Repository über das Kontextmenü in der Quellcodeverwaltungsansicht in einem Terminal öffnen.

Open in terminal from Source Control view

Remote von GitHub hinzufügen

Sie können nun ein GitHub-Repository als Remote zu Ihren lokalen Repositorys hinzufügen, indem Sie den Befehl Git: Remote hinzufügen... verwenden.

Use Add Remote Command

.gitignore generieren beim Veröffentlichen auf GitHub

Es ist nun möglich, eine .gitignore-Datei zu generieren, wenn ein Arbeitsbereich auf GitHub veröffentlicht wird. Beim Veröffentlichen eines Arbeitsbereichs auf GitHub werden Sie aufgefordert, auszuwählen, welche Dateien in das Repository aufgenommen werden sollen, und die nicht enthaltenen Dateien werden zu einer .gitignore-Datei hinzugefügt.

Select which files to include in the repository

Schriftfamilie für Eingabefelder

Sie können nun die Schriftfamilie, die im Eingabefeld der Quellcodeverwaltung verwendet wird, über die Einstellung Scm: Input Font Family anpassen. Die Einstellung unterstützt die folgenden Werte

  • default - Schriftfamilie der Workbench-Benutzeroberfläche.
  • editor - Schriftfamilie, die in der Einstellung Editor: Font Family angegeben ist.
  • Schriftfamilienname - Der Name der Schriftfamilie, die im Eingabefeld verwendet werden soll (z. B. Cascadia Code).

Fortschreitenden Rebase abbrechen

Sie können nun fortschreitende Rebase-Operationen mit dem Befehl Git: Rebase abbrechen abbrechen.

Debugging

Verbesserungen bei automatischen Debug-Konfigurationen

In diesem Meilenstein haben wir die Erfahrung für automatische Debug-Konfigurationen verbessert

  • Im letzten Meilenstein haben wir eine Funktion eingeführt, mit der Erweiterungsautoren das aktuelle Projekt analysieren und automatisch Debug-Konfigurationen anbieten können. Diese Debug-Konfigurationen werden dynamisch erstellt und erscheinen daher nicht in der Konfigurationsdatei launch.json. Das ist gut, solange sie sofort funktionieren, aber manchmal müssen Sie die Konfiguration ändern, z. B. um ein zusätzliches Argument hinzuzufügen. Es gibt nun eine Option, eine automatische Debug-Konfiguration in einer launch.json zu speichern, um sie zum Bearbeiten zu öffnen. Verwenden Sie dazu den Zahnrad-Button am Ende der automatischen Debug-Konfiguration in der Schnellwahl Debug: Debugging auswählen und starten.

    Selecting Edit automatic debug configuration in launch

  • Es ist nun möglich, alle automatischen Debug-Konfigurationen aus der Startansicht "Ausführen und Debuggen" anzuzeigen.

    Automatic debug configs in start view

  • Das Debug-Dropdown speichert nun die zuletzt ausgewählte automatische Debug-Konfiguration.

Step Into-Ziele

In eine Anweisung mit vielen verschachtelten Funktionsaufrufen zu debuggen, kann mühsam sein, da Sie möglicherweise durch Funktionen treten müssen, die Sie nicht wirklich interessieren. Um dieses Szenario zu verbessern, unterstützt das Debug Adapter Protocol die Funktion "Step Into Target", die eine Benutzeroberfläche anzeigt, um direkt in die gewünschte Funktion einzutreten.

In diesem Meilenstein beginnt VS Code, diese Funktion zu nutzen. Wenn das Debugging bei einer Anweisung angehalten hat, zeigt das Kontextmenü eine neue Aktion Step Into Targets an. Diese Aktion präsentiert eine Liste aller Ziele (typischerweise Funktionen), die im aktuellen Stack-Frame verfügbar sind. Die Auswahl eines davon führt zum Eintritt in dieses Ziel.

Beachten Sie, dass jeder Stack-Frame eigene Ziele haben kann. Die Ergebnisse der Aktionen Step Into Targets hängen also vom aktuell ausgewählten Frame in der CALL STACK-Ansicht ab.

Step into targets in context menu

Derzeit hat nur die Mock Debug-Erweiterung (Fake) Step Into Target-Unterstützung, aber bald werden andere Debug-Erweiterungen folgen – wie der Julia-Debugger.

Sprachen

TypeScript 3.9

VS Code enthält nun TypeScript 3.9.4. Dieses wichtige TS-Update bringt einige neue Werkzeugfunktionen, Leistungsverbesserungen und eine Reihe von Fehlerbehebungen. Sie können mehr über TS 3.9 im TypeScript-Blog lesen.

CommonJS Auto-Imports

Wenn VS Code erkennt, dass Sie in einem JavaScript-Modul im CommonJS-Stil arbeiten, verwenden Auto-Imports nun require anstelle von import.

Auto imports using 'require' in a JS file

Refactorings erhalten Zeilenumbrüche

Refactorings für JavaScript und TypeScript, wie In Methode extrahieren und In neue Datei verschieben, versuchen nun, die ursprüngliche Formatierung des refaktorierten Quellcodes beizubehalten. Dies schließt alle Zeilenumbrüche in der Auswahl ein.

The 'extract method' refactoring preserving newlines

Quellaktion "Alle fehlenden Importe hinzufügen"

VS Code unterstützt seit langem eine Schnelle Korrektur, die alle fehlenden Importe in einer JavaScript- oder TypeScript-Datei hinzufügt. In dieser Iteration haben wir eine neue Quellaktion Alle fehlenden Importe hinzufügen eingeführt, mit der Sie diese von überall in einer Datei auslösen können.

Adding imports using a source action

Dies ermöglicht es Ihnen auch, eine Tastenkombination für Alle fehlenden Importe hinzufügen einzurichten.

{
  "key": "ctrl+shift+i",
  "command": "editor.action.sourceAction",
  "args": {
    "kind": "source.addMissingImports",
    "apply": "first"
  }
}

Oder aktivieren Sie sogar Alle fehlenden Importe hinzufügen beim Speichern.

"editor.codeActionsOnSave": [
    "source.addMissingImports"
]

JS/TS Gehe zu Symbol im Arbeitsbereich schließt alle geöffneten Projekte ein

Standardmäßig durchsucht die Arbeitsbereichssymbolsuche für JavaScript und TypeScript nun alle geöffneten jsconfig- und tsconfig-Projekte. Zuvor wurden nur Suchergebnisse aus dem Projekt des fokussierten Dokuments berücksichtigt.

Dieses Verhalten wird durch die Einstellung typescript.workspaceSymbols.scope gesteuert und erfordert TS 3.9+. Um zum vorherigen Verhalten zurückzukehren und nur das aktuelle Projekt zu durchsuchen, setzen Sie "typescript.workspaceSymbols.scope": "currentProject".

Fehlende Importe hinzufügen Schnelle Korrekturen können jetzt als bevorzugt markiert werden

Die Schnelle Korrektur Fehlenden Import hinzufügen für JavaScript und TypeScript kann nun als bevorzugte Korrektur für einen Fehler markiert werden. Dies ermöglicht Ihnen, den fehlenden Import mit einem einzigen Tastendruck über ⌥⌘. (Windows, Linux Shift+Alt+.) hinzuzufügen.

Beachten Sie, dass Fehlenden Import hinzufügen nur als bevorzugte Korrektur markiert wird, wenn ein einzelner gültiger Import vorhanden ist. Wenn es mehrere potenzielle Importe in Ihren Projekten gibt, müssen Sie immer noch das normale Code Actions-Menü verwenden, um auszuwählen, welcher Import verwendet werden soll. Außerdem müssen Sie, um Fehlenden Import hinzufügen Schnelle Korrekturen in JavaScript zu aktivieren, die Typüberprüfung aktivieren.

JSON Offline-Modus

Eine neue Einstellung json.schemaDownload.enable ermöglicht es Ihnen zu steuern, ob die JSON-Erweiterung JSON-Schemas von http und https abrufen darf.

Ein Warnsymbol in der Statusleiste wird angezeigt, wenn der aktuelle Editor Schemas verwenden möchte, die nicht heruntergeladen werden können. Schema-basierte Funktionen wie Validierung, Code-Vervollständigung und Tooltips sind dann eingeschränkt.

JSON warning triangle

Browserunterstützung

Debug-gestopptes Indikator im Tab-Titel

Beim Debuggen einer Erweiterung im Browser erscheint die debuggte Erweiterung in einem neuen Browser-Tab, der den Debugger-Tab deaktiviert (ausblendet). Wenn der Debuggee aus irgendeinem Grund stoppt, z. B. einen Breakpoint erreicht, können wir den Debugger-Tab nicht aktivieren (da Browser dafür keine API bereitstellen). Dies macht es fast unmöglich zu erkennen, dass die debuggte Erweiterung angehalten hat.

Um dieses Problem zu mildern, aktualisieren wir nun den Tab-Titel mit einem roten Kreis-Indikator 🔴 (ähnlich einem Breakpoint). Sobald der Debugger-Tab aktiviert wird, wird der rote Punkt entfernt.

Debuggee stopped indicator in web view

VS Code aus dem integrierten Terminal ausführen

Wenn Sie ein integriertes Terminal in VS Code im Browser öffnen, können Sie code eingeben, um auf mehrere nützliche Befehle zuzugreifen, die alle im Browser funktionieren.

Terminal Remote

In dieser Iteration haben wir die Unterstützung für viele Optionen erweitert

  • --goto zum Öffnen einer Datei an einer bestimmten Zeile
  • --diff zum Vergleichen zweier Dateien
  • --wait, damit ein Programm auf das Schließen von Dateien wartet
  • --add zum Hinzufügen eines Ordners zum aktuellen Arbeitsbereich

In GitHub Codespaces beispielsweise ermöglicht dies die Verwendung von VS Code im Browser als Editor für Git.

VS Code Git Editor in Browser

Theme: GitHub Light

Datei-/Ordner-Upload

VS Code ermöglicht es Ihnen, Dateien per Drag-and-Drop in den Datei-Explorer zu ziehen, um sie hochzuladen. In dieser Iteration haben wir diese Funktion verbessert, um auch das Ablegen von Ordnern zu ermöglichen, einschließlich aller Unterordner und Dateien. Da dies eine langwierige Operation sein kann, sehen Sie den Fortschritt in der Statusleiste und können die Operation bei Bedarf abbrechen.

Drag files into File Explorer

Kontenverwaltung

In früheren Versionen haben wir eine Vorschau einer neuen Benutzeroberfläche zur Kontenverwaltung neben der Vorschau der Funktion "Einstellungen synchronisieren" vorgestellt. Nun wird diese Benutzeroberfläche standardmäßig angezeigt. Erweiterungen, die die neue vorgeschlagene Authentifizierungsanbieter-API verwenden, können hier Anfragen zur Anmeldung anzeigen, und Sie können Ihre Konten einsehen und den Zugriff von Erweiterungen verwalten. Es gibt derzeit eine begrenzte Anzahl von Erweiterungen, die diese API verwenden. Wir werden daran arbeiten, die Akzeptanz zu erhöhen, sobald die API stabil ist.

Vorschau-Funktionen

Vorschau-Features sind noch nicht zur Veröffentlichung bereit, aber funktionsfähig genug, um sie zu nutzen. Wir freuen uns über Ihr frühes Feedback, während sie sich in der Entwicklung befinden.

Einstellungen-Synchronisierung

Wir haben in den letzten Monaten daran gearbeitet, die Synchronisierung von VS Code-Präferenzen über mehrere Maschinen hinweg zu unterstützen, und diese Funktion ist in der Insiders-Version zur Vorschau verfügbar.

In diesem Meilenstein haben wir die Unterstützung für die Verwaltung und Diagnose der Einstellungen-Synchronisation verbessert.

Ansicht "Synchronisierte Maschinen"

Wir haben die Ansicht Synchronisierte Maschinen hinzugefügt, um die Liste der Maschinen anzuzeigen, die Ihre VS Code-Präferenzen synchronisieren. Ein Standardname wird basierend auf dem Typ von VS Code (Insiders oder Stable) und der von Ihnen verwendeten Plattform bereitgestellt, aber Sie können den Namen jederzeit über die Bearbeitungsaktion für den Maschineneintrag in der Ansicht ändern.

Synced Machines view

Theme: GitHub Sharp with Customizations

Sie können diese Ansicht über den Befehl Einstellungen synchronisieren: Synchronisierte Daten anzeigen aus der Befehlspalette öffnen.

Ansicht "Synchronisierte Daten"

Wir haben die folgenden Verbesserungen an der Ansicht "Synchronisierte Daten" vorgenommen.

  • Sie können nun die Maschine sehen, von der Daten synchronisiert werden.
  • Sie können mit der Aktion Wiederherstellen, die für den Dateneintrag in der Ansicht verfügbar ist, auf einen bestimmten Zustand zurückkehren.
  • Sie können Daten in der Cloud mit der Aktion Synchronisierte Daten zurücksetzen unter der Schaltfläche Weitere Aktionen (...) in der Ansicht kopfüber zurücksetzen.

Synced Data view

Theme: GitHub Sharp with Customizations

Wir bieten nun mehr Unterstützung beim Einschalten der Synchronisierung, indem wir prüfen, ob Sie im Begriff sind, mit Daten von einer anderen Maschine zu synchronisieren, und Ihnen ermöglichen, entsprechende Maßnahmen zu ergreifen.

  • Lokal ersetzen - Ersetzen Sie Ihre Daten auf der aktuellen Maschine durch die synchronisierten Daten aus der Cloud.
  • Zusammenführen - Führen Sie Ihre Daten auf der aktuellen Maschine mit den synchronisierten Daten aus der Cloud zusammen.
  • Synchronisierte Daten anzeigen - Öffnen Sie die Ansicht "Synchronisierte Daten", um die synchronisierten Daten aus der Cloud anzuzeigen.

Replace or Merge pop-up

Neuer JavaScript-Debugger

In diesem Monat haben wir weitere Fortschritte bei unserem neuen JavaScript-Debugger gemacht. Seit Mitte Mai ist er der Standarddebugger in Insiders und ist in dieser Version (aber nicht standardmäßig aktiviert) in VS Code Stable enthalten. Sie können ihn mit Ihren vorhandenen Startkonfigurationen verwenden, indem Sie die Einstellung debug.javascript.usePreview aktivieren.

Die Fortschritte in diesem Monat konzentrierten sich hauptsächlich auf die Verfeinerung und Stabilisierung bestehender Funktionalitäten.

  • Unterstützung mehrerer Tabs für Browser-Debugging: Sie können nun mehrere Tabs anhängen, wenn Sie Browser oder Webviews ausführen. Standardmäßig wird js-debug an alle Tabs angehängt, die dem urlFilter entsprechen. Beim Anhängen an Browser können Sie "targetSelection": "pick" in Ihrer Startkonfiguration festlegen, um wie beim vorherigen Debugger eine einzelne Registerkarte zu verbinden.
  • Verbesserte Tab-Disambiguierung: Die Debug-Sitzungsnamen unterscheiden mehrere Tabs genauer. Zusätzlich haben wir eine Aktion Tab fokussieren im Kontextmenü für die Debug-Sitzung in der Call Stack-Ansicht hinzugefügt, mit der Sie sicherstellen können, dass Sie die richtige Seite betrachten.
  • Option zum automatischen Erweitern von Gettern: Im Einklang mit dem Verhalten von Chrome werden Property-Getter standardmäßig nicht ausgewertet, wenn sie in der Variablenansicht oder der Debug-Konsole angezeigt werden. Sie können dieses Verhalten nun konfigurieren, indem Sie die Option debug.javascript.autoExpandGetters einstellen.
  • Leistungsverbesserungen für Arten von Webpack-Bundles: Bestimmte Arten von Webpack-Bundles, die mit eval Sourcemaps erstellt wurden, liefen unter js-debug langsam. Das ist nun nicht mehr der Fall.

Unterstützung für TypeScript 4.0 Nightly Builds

VS Code 1.46 enthält Vorschauunterstützung für TypeScript 4.0 Nightly Builds. Der Nightly Build enthält Unterstützung für einige neue Werkzeugfunktionen, an denen wir aktiv arbeiten, wie z. B. flexiblere Auswahlmöglichkeiten für Refactorings.

Sie können TypeScript 4.0 Nightly Builds heute ausprobieren, indem Sie die TypeScript Nightly-Erweiterung installieren. Bitte geben Sie Feedback und lassen Sie uns wissen, wenn Sie auf Fehler bei TypeScript 4.0 stoßen.

Beiträge zu Erweiterungen

Notebooks

Schneller Überblick

Notebook-Erweiterungen, wie z. B. GitHub Issue Notebooks, unterstützen nun den schnellen Überblick. Drücken Sie kb('workbench.action.gotoSymbol') oder verwenden Sie den Befehl Im Editor nach Symbol suchen, um eine Vorschau aller Markdown- und Code-Zellen des aktuellen Notebooks zu sehen.

Notebook quick outline preview list

Thema: GitHub Theme

Fehler- und Symbolnavigation

Wir haben verbessert, wie F8 und Alle Referenzen finden funktionieren. Alle Code-Navigationsgesten sollten sich so natürlich anfühlen, wie sie außerhalb von Notebooks sind. Beispielsweise zeigt die Probleme-Ansicht nun alle Fehler aller Zellen an, gruppiert nach Notebook, nicht mehr nach Zelle.

Problems panel with errors grouped by notebook

Thema: GitHub Theme

Zellen verbinden/teilen

Wir haben zwei Befehlssätze eingeführt, mit denen Sie Zellen schnell verbinden oder Zellen in kleinere Fragmente aufteilen können.

Running Join and Split Notebook cells commands

Thema: GitHub Dark Theme

Beibehaltung von Notebooks

Angepinnte oder geänderte Notebook-Editoren sind nun im Arbeitsbereich persistent, sodass Benutzer den Arbeitszustand im Notebook nicht verlieren, wenn das Notebook in den Hintergrund verschoben oder in eine andere Editor-Gruppe verschoben wird.

Persisted Notebook

Thema: GitHub Dark Theme

Vereinheitlichter Rückgängig/Wiederherstellen-Stapel

Benutzeroperationen zur Bearbeitung von Notebook-Zellen oder zur Änderung von Notebook-Zellinhalten werden nun im selben Rückgängig-/Wiederherstellen-Stapel verfolgt.

Show tracking of Unified Undo/Redo stack

Thema: GitHub Dark Theme

GitHub Pull Requests und Issues

Die Arbeit an der GitHub Pull Requests und Issues-Erweiterung, die es Ihnen ermöglicht, an Pull-Requests und Issues zu arbeiten, diese zu erstellen und zu verwalten, wird fortgesetzt. Einige Aktualisierungen für diese Version sind:

  • Verbesserte Labels in Issue-Tooltips.
  • Issue- und Benutzervorschläge werden nun nur in Kommentaren und Plaintext ausgelöst.
  • Der neue Issue-Editor ermöglicht es Ihnen, Zuweisungen und Labels festzulegen.

Um alle neuen Funktionen und Updates zu erfahren, können Sie das vollständige Changelog für die Version 0.17.0 der Erweiterung einsehen.

Remote-Entwicklung

Die Arbeit an den Remote Development-Erweiterungen wird fortgesetzt. Diese ermöglichen es Ihnen, einen Container, eine Remote-Maschine oder das Windows Subsystem for Linux (WSL) als voll ausgestattete Entwicklungsumgebung zu nutzen.

Neue Funktionen in 1.46 beinhalten

  • Dev Containers: Unterstützung für GPG-Weiterleitung.
  • Dev Containers: Unterstützung für die Inspektion eines Docker-Volumes.
  • Dev Containers: Neue devcontainer.json-Befehlseigenschaften.

Sie können sich über neue Erweiterungsfunktionen und Fehlerbehebungen in den Remote Development Release Notes informieren.

Hex-Editor

Da die Custom Editor API mit Unterstützung für Binär-Editoren finalisiert wurde, haben wir eine Hex Editor-Erweiterung entwickelt, um ein natives Hex-Bearbeitungserlebnis zu bieten.

Hex Editor

Diese Erweiterung befindet sich noch in der Entwicklung und unterstützt derzeit nur das Öffnen und Navigieren von Dateien als Hexadezimalwerte. Wir werden die Navigationserfahrung weiter verbessern und uns dann der Bearbeitung widmen. Sie können die Erweiterung ausprobieren und Feedback geben oder Issues im vscode-hexeditor Repository melden.

Erweiterungs-Authoring

Dateipfad Groß-/Kleinschreibung

Wir haben einige Fehler bei der Behandlung von Pfaden und URIs durch VS Code auf fallbasierten Dateisystemen behoben. Vor dieser Version wurden Pfade mit unterschiedlicher Groß-/Kleinschreibung nicht dasselbe Dokument, sondern separate, getrennte Dokumente geöffnet. Dieses Verhalten führte oft zu Verwirrung und manchmal zu Datenverlust.

Bei der Behebung dieser Fehler hat sich das Verhalten der Funktion openTextDocument geändert. Die Funktion kann nun ein Dokument mit einer URI zurückgeben, deren Groß-/Kleinschreibung von der übergebenen URI abweicht. Das bedeutet, dass Erweiterungen TextDocument#uri als Quelle der Wahrheit verwenden sollten, nicht die URI, mit der sie angefordert wurde.

Das folgende Beispiel veranschaulicht das neue Verhalten.

// case-insensitive file system

const uriA = vscode.Uri.file('/foo/bar.code');
const docA = await vscode.workspace.openTextDocument(uriA);

const uriB = vscode.Uri.file('/foo/BAR.code');
const docB = await vscode.workspace.openTextDocument(uriB);

assert.ok(docA === docB); // same document
assert.ok(docB.uri.toString() === uriA.toString()); // uriA is used, NOT uriB
assert.ok(docB.uri.toString() !== uriB.toString());

Neue Debug Console-Themenfarben

Es gibt neue Farben für das Styling der Debug Console-Ansicht.

  • debugConsole.infoForeground: Vordergrundfarbe für Info-Meldungen in der Debug Console.
  • debugConsole.warningForeground: Vordergrundfarbe für Warnmeldungen in der Debug Console.
  • debugConsole.errorForeground: Vordergrundfarbe für Fehlermeldungen in der Debug Console.
  • debugConsole.sourceForeground: Vordergrundfarbe für Quellcode-Dateinamen in der Debug Console.
  • debugConsoleInputIcon.foreground: Vordergrundfarbe für das Eingabemarkierungs-Icon der Debug Console.

Neue Eingabe-Themenfarben

Wir haben auch neue Farbthemenoptionen für Eingaben. Sie können die Vordergrundfarbe für aktive Eingabeoptionen über inputOption.activeForeground festlegen. Diese werden in der Suchansicht und im Such-Widget (Editor, Terminal, Debug Console) angezeigt.

Input option foreground color

Thema: GitHub Dark Theme

Neue Codicon-Icons

Wir haben die folgenden neuen Icons zu unserer Codicon-Bibliothek hinzugefügt.

  • server-process
  • server-environment
  • record
  • pass
  • stop-circle
  • play-circle

New available icons

Thema: GitHub Dark Theme

Anbieter verwenden generische Typen

Unsere vscode.d.ts Typisierungen machen nun alle Zweiphasen-Provider – solche mit separaten 'provide'- und 'resolve'-Methoden – generisch. Ziel war es, klarer zu machen, dass die Ergebnisse des 'provide'-Aufrufs an den 'resolve'-Aufruf weitergegeben werden.

Hier ist zum Beispiel die neue generische Definition von DocumentLinkProvider

export interface DocumentLinkProvider<T = DocumentLink> {
  provideDocumentLinks(
    document: TextDocument,
    token: CancellationToken
  ): ProviderResult<T[]>;

  resolveDocumentLink?(link: T, token: CancellationToken): ProviderResult<T>;
}

Alle Provider haben ein Standard-Generikargument, sodass diese Änderung keine Fehler in Ihrer bestehenden Erweiterung verursachen sollte. Wenn Sie zuvor Güsse oder Typüberprüfungen bei der Implementierung von 'resolve' verwendet haben, sollten Sie Ihren Code aktualisieren, um stattdessen einen generischen Provider zu verwenden.

class MyDocLinkProvider implements DocumentLinkProvider<MyDocumentLink> {

  provideDocumentLinks(document: TextDocument, token: CancellationToken): MyDocumentLink[] { ... }

  resolveDocumentLink(link: MyDocumentLink, token: CancellationToken): MyDocumentLink { ... }
}

Themenspezifisches CSS in Webviews schreiben

Das Body-Element von Webviews hat ein neues Datenattribut namens vscode-theme-name, das den vollständigen Namen des aktuell aktiven Themas speichert. Dies ermöglicht Ihnen, themenspezifisches CSS in Webviews zu schreiben.

body[data-vscode-theme-name="One Dark Pro"] {
    background: hotpink;
}

Beachten Sie, dass Sie angesichts der Vielzahl von Themes, die für VS Code verfügbar sind, nur in Ausnahmefällen themenspezifisches CSS schreiben sollten. Normale Webviews sollten stattdessen die Klassennamen .vscode-light und .vscode-dark zusammen mit den VS Code CSS-Variablen verwenden, um CSS zu schreiben, das sich an jedes vom Benutzer ausgewählte Thema anpasst.

Benutzerdefinierte Binärdateieditoren

Wir haben die API für benutzerdefinierte Binärdateieditoren finalisiert. Die Custom Editor API ermöglicht es Erweiterungen, benutzerdefinierte webview-basierte Editoren zu erstellen, die entweder den Standardtexteditor von VS Code ersetzen oder von Benutzern umgeschaltet werden können. Dies kann zur Vorschau von Asset-Dateien wie Bildern oder 3D-Modellen direkt in VS Code verwendet werden, oder zum Erstellen spezialisierterer Bearbeitungsschnittstellen für bestimmte Dateitypen. Mit der neuen Binary Custom Editor API können Sie nun auch Lese-/Schreibeditoren für nicht-textbasierte Dateiformate erstellen.

A custom editor for binary files

Das Erweiterungsleitfaden für benutzerdefinierte Editoren behandelt die API detaillierter. Sehen Sie sich auch das Beispiel für eine benutzerdefinierte Editor-Erweiterung an, das Beispiele für benutzerdefinierte Editoren für Text- und Binärdateiformate enthält.

Gelockerte resolveCompletionItem

Die Funktion CompletionItemProvider#resolveCompletionItem ermöglicht es Providern, Vervollständigungen verzögert mit mehr Daten anzureichern. Diese "verzögerten" Daten müssen optional sein und dürfen das Einfügeverhalten von Vervollständigungen nicht ändern. Erweiterungen können weiterhin additionalTextEdits ausfüllen, und wenn zusätzliche Edits *nachdem* eine Vervollständigung eingefügt wurde, eintreffen, wird der Editor immer noch versuchen, sie anzuwenden. Beachten Sie, dass dies nur für zusätzliche Edits gilt, nicht für die Hauptbearbeitung (insertText), die sich nach der Bereitstellung nicht mehr ändern darf.

Aktivierungsereignis onStartupFinished

Wir haben jetzt ein neues Aktivierungsereignis, ähnlich dem bereits vorhandenen Aktivierungsereignis *. Das neue Aktivierungsereignis onStartupFinished sollte verwendet werden, wenn eine Erweiterung kurz nach dem VS Code-Start aktiviert werden soll, aber nicht als Teil des Startvorgangs.

Umgebungsvariablensammlung

Die API ExtensionContext.EnvironmentVariableCollection ist jetzt stabil und ermöglicht es Erweiterungen, zu Terminalumgebungen beizutragen.

const collection = context.environmentVariableCollection;
const separator = process.platform === 'win32' ? ';' : ':';
collection.prepend('PATH', `/foo${separator}`);
collection.replace('JAVA_HOME', '/bar');

Diese Sammlungen sind erweiterungs- und arbeitsbereichsspezifisch, und VS Code kümmert sich um die Behandlung von Konflikten zwischen mehreren Erweiterungen. Sie werden über Fensterneustarts hinweg beibehalten, sodass von den Terminals, die unmittelbar nach dem Laden des Fensters erstellt werden, nicht auf den Start des Erweiterungs-Hosts gewartet werden muss, sondern stattdessen die zuletzt bekannte Version verwendet wird. Diese persistenten Sammlungen werden durch Entsorgen der Sammlung oder durch Deinstallieren der Erweiterung entfernt.

Wenn sich Sammlungen ändern, erscheint ein Indikator im Terminal. Ob dieser Indikator für jede aktive Änderung oder nur für "veraltete" Terminals angezeigt wird, wird durch die Einstellung terminal.integrated.environmentChangesIndicator bestimmt. Diese API wird nun auch von der integrierten Git-Erweiterung verwendet, um VS Code als Authentifizierungsanbieter zu ermöglichen.

Debug Adapter Protocol

Neue Instruktions-Breakpoints

Es gibt einen neuen Breakpoint-Typ namens "instruction", der es ermöglicht, an einer Speicheradresse auf eine Instruktion zu stoppen. Speicheradressen werden in symbolischer Form angegeben, die optional von Anfragen wie evaluate, variables, stackTrace und gotoTargets verfügbar ist. Eine entsprechende Fähigkeit supportsInstructionBreakpoints zeigt an, ob ein Debug-Adapter Instruktions-Breakpoints unterstützt.

Unterstützung für "Stepping-Granularität"

Ein neues optionales Argument granularity wurde zu den Stepping-Anfragen next, stepIn, stepOut, stepBack hinzugefügt, um zu steuern, ob die Anfrage eine "Anweisung" (statement), eine "Zeile" (line) oder eine "Instruktion" (instruction) weiterverfolgt. Eine entsprechende Fähigkeit supportsSteppingGranularity zeigt an, ob ein Debug-Adapter die Funktion unterstützt.

Vorgeschlagene Erweiterungs-APIs

Jeder Meilenstein bringt neue vorgeschlagene APIs mit sich und Erweiterungsautoren können sie ausprobieren. Wie immer wünschen wir uns Ihr Feedback. Hier erfahren Sie, wie Sie eine vorgeschlagene API ausprobieren können

  • Sie müssen Insiders verwenden, da sich vorgeschlagene APIs häufig ändern.
  • Sie müssen diese Zeile in der Datei package.json Ihrer Erweiterung haben: "enableProposedApi": true.
  • Kopieren Sie die neueste Version der Datei vscode.proposed.d.ts in den Quellcode-Speicherort Ihres Projekts.

Beachten Sie, dass Sie keine Erweiterung veröffentlichen können, die eine vorgeschlagene API verwendet. Möglicherweise gibt es in der nächsten Version Breaking Changes, und wir möchten niemals bestehende Erweiterungen brechen.

Git-Erweiterungs-API

Die integrierte Git-Erweiterung bietet eine API zur Nutzung durch Erweiterungen. Die bestehende API bot eine Möglichkeit, log-Ergebnisse für ein Repository zu erhalten. Die aktualisierte API erlaubt es nun, log nach einem path einzuschränken.

export interface LogOptions {
  readonly maxEntries?: number;
  readonly path?: string;
}
export interface Repository {
  log(options?: LogOptions): Promise<Commit[]>;
}

Es gibt jetzt auch eine Git-Erweiterungs-API, um getBranches basierend auf einem BranchQuery abzurufen.

export interface BranchQuery {
  readonly remote?: boolean;
  readonly contains?: string;
}
export interface Repository {
  getBranches(query: BranchQuery): Promise<Ref[]>;
}

AccessibilityInformation

Wir haben AccessibilityInformation zu den Elementen TreeItem, StatusBarItem und TimelineItem hinzugefügt, um Screenreader zu unterstützen. AccessibilityInformation enthält ein label und eine role. Das label wird von Screenreadern gelesen und die role beschreibt die Barrierefreiheitsmerkmale des Elements.

Technik

Windows ARM64 Insiders

Es gibt neue offizielle Insider-Builds für Windows für ARM 64-Bit, die auf der Insiders Download-Seite verfügbar sind.

Diese Builds funktionieren mit dem Microsoft Surface Pro X. Probieren Sie sie aus und geben Sie uns Ihr Feedback.

Windows ARM64

--crash-reporter-directory Argument zur Diagnose von Problemen

Ein neues Befehlszeilenargument --crash-reporter-directory ermöglicht es Ihnen, einen lokalen Ordner anzugeben, in dem Absturzberichte gespeichert werden sollen. Dies funktioniert sogar für Abstürze im Erweiterungs-Host und kann immer dann verwendet werden, wenn VS Code abstürzt und Sie ein Problem melden möchten.

Preload Scripts

Wir haben Electron preload-Skripte zu VS Code hinzugefügt, um bestimmte Electron-APIs dem Fenster zur Verfügung zu stellen. Dies ist einer der ersten Schritte in Richtung eines vollständig isolierten Fensters. Der Fortschritt ist in Issue #92164 dargelegt.

Erweiterungsbeispiele verwenden jetzt ESLint

Unsere Erweiterungsbeispiele wurden alle aktualisiert, um ESLint für die Linting anstelle des nun veralteten TSLint zu verwenden. Wenn Ihre Erweiterung immer noch TSLint verwendet, können Sie das Migrationsleitfaden von TSLint zu ESLint und unsere neu aktualisierten Erweiterungsbeispiele überprüfen, um zu sehen, wie Sie zu ESLint migrieren.

GitHub Triage Extension

Wir haben eine Erweiterung für Chromium-basierte Browser erstellt, um uns bei der Problembehandlung auf GitHub zu helfen, indem wir ein einziges, nach Schlagwörtern filterbares Menü mit Bearbeitern, Labels, Meilensteinen und verschiedenen Sonderkommentaren bereitstellen, die wir zur Auslösung unserer Triage GitHub Actions verwenden. Wir haben den Code auf GitHub open-sourced.

Screenshot of Extension

Dokumentation und Erweiterungen

Visual Studio Code auf der Build

Das VS Code-Team präsentierte sich auf der Microsoft Build 2020 Konferenz. Eine Übersicht über die VS Code-Sitzungen und Online-Vorträge finden Sie in diesem VS Code bei Build Blogbeitrag.

Mehrere Vorträge von VS Code-Teammitgliedern

Azure-Erweiterungen

Es gibt mehrere neue Erweiterungen für die Arbeit mit und die Bereitstellung von Azure-Assets direkt aus VS Code heraus.

  • Azure Static Web Apps - Erstellen und verwalten Sie Azure Static Web Apps direkt aus VS Code.
  • Azure-Datenbanken - Erstellen, durchsuchen und aktualisieren Sie global verteilte Multi-Model-Datenbanken in Azure.

Azure Databases extension

Neue Befehle

Taste Befehl Befehls-ID
⌘K ⇧Enter (Windows, Linux Ctrl+K Shift+Enter) Editor anheften workbench.action.pinEditor
⌘K ⇧Enter (Windows, Linux Ctrl+K Shift+Enter) Editor lösen workbench.action.unpinEditor

Bemerkenswerte Fehlerbehebungen

  • 10144: Verwende system-ui als Schriftart unter Linux
  • 63068: macOS Dock-Symbol ist winzig
  • 69163: Aktive Datei im Seitenbereich anzeigen wirft eine Ausnahme
  • 95367: DAP "evaluate"-Anfrage für ungültige frameId ausgestellt
  • 95856: Gehe zu Zeile sollte das Format "Dateiname.Erweiterung:Zeilennummer" enthalten
  • 96713: Das Stoppen einer Sitzung über die Call-Stack-Aktionen geht immer zur aktiven Sitzung
  • 96914: Tippen ist träge, wenn die Gliederung sichtbar ist
  • 96987: Orca liest die Zeilennummer in der Breakpoint-Ansicht nicht vor
  • 97444: Kopieren eines langen Werts aus Debug-Watch führt zum Einfügen eines teilweisen Werts
  • 97471: Debug-Hover ist zu schmal und horizontales Scrollen nutzlos
  • 97731: VS Code friert beim Tippen und Scrollen ein
  • 96643: Tasks (und TaskExecutions) sind nicht === in den onDid(Start|End)Task-Callbacks

Vielen Dank

Last but certainly not least, ein großes Danke an die folgenden Personen, die diesen Monat zu VS Code beigetragen haben

Beiträge zu unserer Fehlerverfolgung

Beiträge zu vscode

Beiträge zu language-server-protocol

Beiträge zu vscode-generator-code

Beiträge zu vscode-vsce

Beiträge zu debug-adapter-protocol

Beiträge zu vscode-js-debug

  • Vadym Okun (@cbmd): Möglichkeit hinzugefügt, mit einem ausgewählten Paketmanager anstelle von nur npm zu laufen. PR #459

Beiträge zu localization

Wir haben Ihr Feedback im letzten Jahr aufmerksam verfolgt und uns entschieden, dass es an der Zeit ist, eine zuverlässigere und interaktivere Plattform bereitzustellen, auf der Sie zur Lokalisierungsentwicklung von VS Code beitragen können. Vor diesem Hintergrund haben wir die Microsoft Localization Community Platform (MLCP) in der ersten Aprilwoche offiziell außer Betrieb genommen, mit der Absicht, das Microsoft Community Localization Program auf einer alternativen Plattform für Open-Source-Lokalisierungsprojekte fortzusetzen.

Bleiben Sie in den kommenden Wochen auf dem Laufenden für eine Ankündigung auf unserer Wiki-Seite über die neue Community-Plattform. Sie können auch die FAQ-Seite besuchen, um Antworten auf Fragen zu diesem Plattformübergang zu erhalten.

© . This site is unofficial and not affiliated with Microsoft.