Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In einer Lösung sind Projektsysteme für die Bereitstellung von Funktionen für Build, Debug, GoTo- Symbolsuche und vieles mehr verantwortlich. Projektsysteme können dies tun, da sie die Beziehung und die Funktionen von Dateien innerhalb eines Projekts verstehen. Ein Arbeitsbereich für offene Ordner benötigt den gleichen Einblick, um umfangreiche IDE-Features bereitzustellen. Die Sammlung und dauerhafte Speicherung dieser Daten ist ein Prozess, der als Arbeitsbereichsindizierung bezeichnet wird. Diese indizierten Daten können über eine Reihe asynchroner APIs abgefragt werden. Extender können sich am Indizierungsprozess beteiligen, indem sie IFileScanners bereitstellen, die wissen, wie bestimmte Dateitypen zu behandeln sind.
Typen von indizierten Daten
Es gibt drei Arten von Daten, die indiziert sind. Beachten Sie, dass der Typ, der von Dateiscannern erwartet wird, von dem Typ, der aus dem Index deserialisiert wird, abweicht.
Daten | Dateiscannertyp | Indexabfrageergebnistyp | Verwandte Typen |
---|---|---|---|
Referenzen | FileReferenceInfo | FileReferenceResult | FileReferenceInfoType |
Symbole | SymbolDefinition | SymbolDefinitionSearchResult | ISymbolService sollten anstelle von IIndexWorkspaceService für Abfragen verwendet werden. |
Datenwerte | FileDataValue | FileDataResult<T> |
Abfragen nach indizierten Daten
Es stehen zwei asynchrone Typen für den Zugriff auf gespeicherte Daten zur Verfügung. Der erste ist durch IIndexWorkspaceData. Sie bietet grundlegenden Zugriff auf die Daten FileReferenceResult
und FileDataResult
einer einzelnen Datei und zwischenspeichert die Ergebnisse. Die zweite ist die IIndexWorkspaceService, die keine Zwischenspeicherung verwendet, sondern mehr Abfragefunktionen ermöglicht.
using Microsoft.VisualStudio.Workspace;
using Microsoft.VisualStudio.Workspace.Indexing;
private static IIndexWorkspaceData GetCachedIndexedData(IWorkspace workspace)
{
// Gets access to indexed data wrapped in a cache.
return workspace?.GetIndexWorkspaceDataService()?.CreateIndexWorkspaceData();
}
private static IIndexWorkspaceService GetDirectIndexedData(IWorkspace workspace)
{
// Gets direct access to indexed data.
// Can also be casted to IIndexWorkspaceService2.
return workspace?.GetIndexWorkspaceService();
}
Teilnehmen an der Indizierung
Die Arbeitsbereichsindizierung folgt ungefähr der folgenden Sequenz:
- Ermittlung und Persistenz von Dateisystementitäten im Arbeitsbereich (nur beim ersten Öffnen des Scans).
- Pro Datei wird der übereinstimmende Anbieter mit der höchsten Priorität aufgefordert, nach
FileReferenceInfo
s zu suchen. - Pro Datei wird der übereinstimmende Anbieter mit der höchsten Priorität aufgefordert, nach
SymbolDefinition
s zu suchen. - Pro Datei werden alle Anbieter nach
FileDataValue
s gefragt.
Erweiterungen können einen Scanner exportieren, indem IWorkspaceProviderFactory<IFileScanner>
implementiert und der Typ mit ExportFileScannerAttributeexportiert wird. Das Attributargument SupportedTypes
sollte ein oder mehrere Werte aus FileScannerTypeConstantssein. Für einen Beispielscanner siehe das VSSDK Beispiel.
Warnung
Exportieren Sie keinen Dateiscanner, der den FileScannerTypeConstants.FileScannerContentType
Typ unterstützt. Sie wird nur für interne Microsoft-Zwecke verwendet.
In erweiterten Situationen unterstützt eine Erweiterung möglicherweise dynamisch eine beliebige Gruppe von Dateitypen. Anstatt dass MEF IWorkspaceProviderFactory<IFileScanner>
exportiert, kann eine Erweiterung IWorkspaceProviderFactory<IFileScannerProvider>
exportieren. Wenn die Indizierung beginnt, wird dieser Factory-Typ importiert, instanziiert und seine GetSymbolScannersAsync-Methode wird aufgerufen. IFileScanner
Instanzen, die einen beliebigen Wert von FileScannerTpeConstants
unterstützen, werden beachtet, nicht nur Symbole.
Verwandte Inhalte
- Arbeitsbereiche und Sprachdienste – Erfahren Sie, wie Sie Sprachdienste in einen Arbeitsbereich "Ordner öffnen" integrieren.
- Workspace Build – Open Folder unterstützt Buildsysteme wie MSBuild und Makefiles.