Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans une solution, les systèmes de projet sont chargés de fournir des fonctionnalités pour la génération, le débogage, GoTo recherche de symboles, etc. Les systèmes de projet peuvent effectuer ce travail, car ils comprennent la relation et les fonctionnalités des fichiers au sein d’un projet. Un espace de travail Ouvrir le Dossier a besoin des mêmes insights pour fournir des fonctionnalités IDE enrichies. La collection et le stockage persistant de ces données sont un processus appelé indexation de l’espace de travail. Ces données indexées peuvent être interrogées via un ensemble d’API asynchrones. Les extendeurs peuvent participer au processus d’indexation en fournissant des IFileScanners qui savent comment gérer certains types de fichiers.
Types de données indexées
Il existe trois types de données indexées. Notez que le type attendu des analyseurs de fichiers diffère du type désérialisé de l’index.
Données | Type de scanneur de fichiers | Type de résultat de requête d’index | Types connexes |
---|---|---|---|
Références | FileReferenceInfo | FileReferenceResult | FileReferenceInfoType |
Symboles | SymbolDefinition | SymbolDefinitionSearchResult | ISymbolService doit être utilisé au lieu de IIndexWorkspaceService pour les requêtes |
Valeurs de données | FileDataValue | FileDataResult<T> |
Interrogation des données indexées
Il existe deux types asynchrones disponibles pour accéder aux données persistantes. La première méthode se fait via IIndexWorkspaceData. Il fournit un accès de base aux données FileReferenceResult
et FileDataResult
d’un fichier unique, et met en cache les résultats. La deuxième est la IIndexWorkspaceService qui n’utilise pas la mise en cache, mais permet d’obtenir davantage de fonctionnalités d’interrogation.
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();
}
Participation à l’indexation
L’indexation de l’espace de travail suit approximativement la séquence suivante :
- Découverte et maintien des entités du système de fichiers au sein de l'espace de travail (uniquement lors de la première analyse à l'ouverture).
- Par fichier, le fournisseur correspondant avec la priorité la plus élevée est invité à rechercher
FileReferenceInfo
s. - Par fichier, le fournisseur correspondant avec la priorité la plus élevée est invité à rechercher
SymbolDefinition
s. - Par fichier, tous les fournisseurs sont sollicités pour
FileDataValue
s.
Les extensions peuvent exporter un scanneur en implémentant IWorkspaceProviderFactory<IFileScanner>
et en exportant le type avec ExportFileScannerAttribute. L’argument d’attribut SupportedTypes
doit être une ou plusieurs valeurs de FileScannerTypeConstants. Pour un exemple de scanneur, voir l’exemple VSSDK .
Avertissement
N’exportez pas un scanneur de fichiers qui prend en charge le type de FileScannerTypeConstants.FileScannerContentType
. Il est utilisé uniquement à des fins internes microsoft.
Dans les situations avancées, une extension peut prendre en charge dynamiquement un ensemble arbitraire de types de fichiers. Au lieu que MEF exporte IWorkspaceProviderFactory<IFileScanner>
, une extension peut exporter IWorkspaceProviderFactory<IFileScannerProvider>
. Au début de l’indexation, ce type de fabrique sera importé, instancié et sa méthode GetSymbolScannersAsync sera appelée. Les instances IFileScanner
supportant n’importe quelle valeur de FileScannerTpeConstants
seront honorées, et pas seulement les symboles.
Contenu connexe
- Espaces de Travail et Services Linguistiques : découvrez comment intégrer des services linguistiques dans un espace de travail avec un dossier ouvert.
- Construction de l'espace de travail - Open Folder prend en charge les scripts de build tels que MSBuild et makefiles.