所有對
每個 FileContext 都有一個 Guid 來識別它所攜帶的資料類型。 工作區稍後會使用 Guid 來匹配透過 Context 屬性使用資料的延伸模組。 檔案上下文提供者會匯出中繼資料,以識別其可能產生資料的檔案上下文Guid。
定義之後,檔案上下文可以與工作區中任何數量的檔案或資料夾相關聯。 指定的檔案或資料夾可以與任意數目的檔案內容相關聯。 這是一種多對多的關係。
檔案內容最常見的案例與建置、偵錯和語言服務有關。 如需詳細資訊,請參閱與這些案例相關的其他主題。
檔案內容生命週期
生命 FileContext 週期是不確定的。 元件可以隨時非同步請求某一組上下文類型。 將會查詢支援某些要求內容類型子集的提供者。
IWorkspace實例透過該GetFileContextsAsync方法充當消費者和提供者之間的中間人。 使用者可能會請求情境,並根據情境執行一些短期動作,而其他使用者可能會請求情境並維護長期參考資料。
檔案可能會發生變更,導致檔案內容過時。 提供者可以在FileContext上引發事件,以通知使用者更新。 例如,如果為某些檔案提供建置內容,但磁碟上的變更使該內容失效,則原始生產者可以叫用事件。 任何仍在參考該 FileContext 的消費者,然後可以重新查詢新的 FileContext。
備註
沒有針對消費者的推送模式。 消費者在提出請求後不會收到供應商的新 FileContext 通知。
昂貴的檔案上下文計算
從磁碟讀取檔案內容可能會很昂貴,尤其是當提供者需要解析檔案之間的關聯性時。 例如,可能會查詢提供者關於某些來源檔案的檔案內容,但該檔案內容依賴於專案檔案的中繼資料。 剖析專案檔案或使用 MSBuild 評估專案檔案的成本很高。 相反地,擴充套件可以匯出一個IFileScanner以在工作區索引期間建立FileDataValue資料。 現在,當要求檔案內容架構時,系統可以快速查詢該索引資料。 如需索引的詳細資訊,請參閱 工作區索引主題 。
警告
請謹慎對待 FileContext 其他計算成本高昂的方式。 某些 UI 互動是同步的,並且依賴大量 FileContext 請求。 範例包括開啟編輯器索引標籤,以及開啟 方案總管 操作功能表。 這些動作會提出許多建置環境定義類型要求。
與檔案情境相關的 API
- FileContext 保存資料和中繼資料。
- IFileContextProvider ,然後 IFileContextProvider<T> 建立檔案內容。
- ExportFileContextProviderAttribute 匯出檔案上下文提供者。
- GetFileContextsAsync 用於消費者獲取文件上下文。
- BuildContextTypes 定義「Open Folder」將使用的建置上下文類型。
檔案情境動作
雖然 a FileContext 本身只是有關某些文件的數據,但 an IFileContextAction 是一種表達和處理該數據的方法。
IFileContextAction 的使用非常靈活。 最常見的兩種情況是構建和調試。
報告進度
ExecuteAsync 方法傳遞了 IProgress<IFileContextActionProgressUpdate>,但不應將引數用作該類型。
IFileContextActionProgressUpdate 是一個空介面,IProgress<IFileContextActionProgressUpdate>.Report(IFileContextActionProgressUpdate) 可能會擲出 NotImplementedException。 相反地,IFileContextAction 必須根據情況將引數轉換為另一種類型。
如需 Visual Studio 所提供類型的相關資訊,請參閱各場景的文件。
檔案內容操作相關 API
-
IFileContextAction 根據
FileContext執行某些行為。 -
IFileContextActionProvider創建
IFileContextAction的實例。 -
ExportFileContextActionProviderAttribute 匯出類型
IWorkspaceProviderFactory<IFileContextActionProvider>.
檔案監看
工作區會接收檔案變更通知,並透過 IFileWatcherServiceGetFileWatcherService 提供。 符合 “ExcludedItems” 設定的檔案不會產生檔案通知事件。 事件之間的臨界值用於簡化通知和減少重複。 當您需要對檔案變更做出反應時,您應該訂閱此服務。
小提示
工作區的 索引服務 預設會訂閱檔案事件。 檔案的新增和修改會觸發與該檔案新資料相關的 IFileScanner 事件。 檔案刪除將刪除索引資料。 您不需要將 IFileScanner 訂閱到檔案監視服務。