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.
Alle Einblicke in Open Folder-Arbeitsbereiche werden von "Dateikontextanbietern" erstellt, die die IFileContextProvider Schnittstelle implementieren. Diese Erweiterungen können nach Mustern in Ordnern oder Dateien suchen, MSBuild-Dateien lesen und Makefiles lesen, Paketabhängigkeiten erkennen usw. um die Erkenntnisse zu sammeln, die sie zum Definieren eines Dateikontexts benötigen. Ein Dateikontext selbst führt keine Aktion aus, sondern stellt Daten bereit, auf die dann eine andere Erweiterung reagieren kann.
Jedes FileContext hat ein mit ihm verbundenes Guid, das die Art der darin enthaltenen Daten identifiziert. Ein Arbeitsbereich verwendet später dies Guid, um es mit Erweiterungen abzugleichen, die die Daten über die Context Eigenschaft nutzen. Ein Dateikontextanbieter wird mit Metadaten exportiert, die identifizieren, für welche Dateikontexte Guid er Daten erzeugen kann.
Nach der Definition kann ein Dateikontext einer beliebigen Anzahl von Dateien oder Ordnern im Arbeitsbereich zugeordnet werden. Eine bestimmte Datei oder ein bestimmter Ordner kann einer beliebigen Anzahl von Dateikontexten zugeordnet werden. Es handelt sich um eine viele-zu-viele Beziehung.
Die häufigsten Szenarien für Dateikontexte beziehen sich auf Build-, Debug- und Sprachdienste. Weitere Informationen finden Sie in den anderen Themen zu diesen Szenarien.
Dateikontextlebenszyklus
Lebenszyklus für eine FileContext sind nicht deterministisch. Eine Komponente kann jederzeit asynchron einige Kontexttypen anfordern. Anbieter, die eine Teilmenge der Anforderungskontexttypen unterstützen, werden abgefragt. Die IWorkspace Instanz fungiert als Mittelmann zwischen dem Verbraucher und anbietern über die GetFileContextsAsync Methode. Verbraucher können einen Kontext anfordern und eine kurzfristige Aktion basierend auf dem Kontext ausführen, während andere einen Kontext anfordern und einen langlebigen Verweis beibehalten.
Änderungen können an Dateien vorgenommen werden, die dazu führen, dass ein Dateikontext veraltet wird. Der Anbieter kann auf FileContext ein Ereignis auslösen, um Verbraucher über Updates zu informieren. Wenn beispielsweise ein Buildkontext für eine Datei bereitgestellt wird, aber eine Änderung auf dem Datenträger diesen Kontext ungültig macht, kann der ursprüngliche Produzent das Ereignis aufrufen. Jeder Verbraucher, der immer noch auf FileContext verweist, kann dann eine neue Abfrage für FileContext starten.
Hinweis
Es gibt kein Push-Modell für Verbraucher. Verbraucher werden nach ihrer Anfrage nicht über das Neue FileContext eines Anbieters benachrichtigt.
Teure Dateikontextberechnungen
Das Lesen von Dateiinhalten vom Datenträger kann teuer sein, insbesondere, wenn ein Anbieter die Beziehung zwischen Dateien auflösen muss. Beispielsweise kann ein Anbieter für den Dateikontext einer Quelldatei abgefragt werden, der Dateikontext ist jedoch von Metadaten aus einer Projektdatei abhängig. Das Analysieren der Projektdatei oder die Auswertung mit MSBuild ist teuer. Stattdessen kann die Erweiterung eine IFileScanner zum Erstellen von FileDataValue Daten während der Arbeitsbereichsindizierung exportieren. Wenn nun nach Dateikontexten gefragt wird, kann die IFileContextProvider schnell auf die indizierten Daten zugreifen. Weitere Informationen zur Indizierung finden Sie im Thema "Arbeitsbereichsindizierung" .
Warnung
Seien Sie vorsichtig bei anderen Aspekten, die FileContext möglicherweise teuer in der Berechnung machen können. Einige UI-Interaktionen sind synchron und basieren auf einer hohen Anzahl von FileContext Anforderungen. Beispiele hierfür sind das Öffnen einer Editor-Registerkarte und das Öffnen eines Kontextmenüs des Projektmappen-Explorers . Diese Aktionen stellen viele Buildkontexttypanforderungen her.
Dateikontextbezogene APIs
- FileContext enthält Daten und Metadaten.
- IFileContextProvider und IFileContextProvider<T> erstellen den Dateikontext.
- ExportFileContextProviderAttribute exportiert einen Dateikontextanbieter.
- GetFileContextsAsync wird für Verbraucher verwendet, um Dateikontexte abzurufen.
- BuildContextTypes definiert Buildkontexttypen, die Open Folder nutzen wird.
Dateikontextaktionen
Während eine FileContext selbst nur Daten zu einigen Dateien ist, ist eine IFileContextAction Möglichkeit, diese Daten auszudrücken und zu handeln.
IFileContextAction ist flexibel in seiner Nutzung. Zwei der häufigsten Fälle sind das Erstellen und Debuggen.
Berichterstellungsfortschritt
Die ExecuteAsync Methode wird mit IProgress<IFileContextActionProgressUpdate> übergeben, aber das Argument sollte nicht in dieser Form verwendet werden.
IFileContextActionProgressUpdate ist eine leere Schnittstelle, und das Aufrufen von IProgress<IFileContextActionProgressUpdate>.Report(IFileContextActionProgressUpdate) kann NotImplementedException werfen. Das IFileContextAction muss stattdessen das Argument bei Bedarf in einen anderen Typ umwandeln.
Informationen zu den von Visual Studio bereitgestellten Typen finden Sie in der Dokumentation des jeweiligen Szenarios.
Dateikontext-aktionsbezogene APIs
-
IFileContextAction führt ein Verhalten basierend auf einem
FileContext. -
IFileContextActionProvider erstellt Instanzen von
IFileContextAction. -
ExportFileContextActionProviderAttribute exportiert den Typ
IWorkspaceProviderFactory<IFileContextActionProvider>.
Dateibeobachtung
Ein Arbeitsbereich lauscht auf Dateiänderungsbenachrichtigungen und stellt die IFileWatcherService via GetFileWatcherService bereit. Dateien, die mit der Einstellung "ExcludedItems" übereinstimmen, erzeugen keine Dateibenachrichtigungsereignisse. Ein Schwellenwert für Ereignisse wird zur Vereinfachung von Benachrichtigungen und zur Reduzierung von Duplikaten verwendet. Wenn Sie auf eine Dateiänderung reagieren müssen, sollten Sie diesen Dienst abonnieren.
Tipp
Der Indizierungsdienst eines Arbeitsbereichs abonniert Dateiereignisse standardmäßig. Dateizufügungen und Änderungen führen dazu, dass relevante IFileScannerEreignisse für neue Daten für diese Datei aufgerufen werden. Dateilöschungen entfernen indizierte Daten. Sie müssen Ihr IFileScanner nicht beim Dateiüberwachungsdienst anmelden.
Verwandte Inhalte
- Indizierung – Arbeitsbereichsindizierung sammelt und speichert Informationen zum Arbeitsbereich.
- Arbeitsbereiche – Überprüfen von Arbeitsbereichskonzepten und Speichereinstellungen.