原始檔控制組態的詳細資料
為了實作原始檔控制,必須正確設定專案系統或編輯器以執行下列動作:
請求轉換至已變更狀態的權限
請求儲存檔案的權限
請求在專案中新增、移除或重新命名檔案的權限
請求轉換至已變更狀態的權限
專案或編輯器必須藉由呼叫 IVsQueryEditQuerySave2 來請求轉換至已變更 (dirty) 狀態的權限。 實作 IsDocDataDirty 的每個編輯器都必須呼叫 QueryEditFiles 並收到核准,才能從環境變更文件,然後再為 IsDocDataDirty 傳回 True
。 專案基本上是專案檔案的編輯器,因此,如同文字編輯器對其檔案所做的一樣,專案檔案都有責任實作變更狀態追蹤。 環境會處理方案的變更狀態,但您必須處理方案參考但未儲存之任何物件的變更狀態,例如:專案檔案或其項目。 一般而言,如果您的專案或編輯器負責管理項目的持續性,則會負責實作變更狀態追蹤。
為了回應 IVsQueryEditQuerySave2::QueryEditFiles
呼叫,環境可以執行下列動作:
拒絕變更的呼叫,在這種情況下,編輯器或專案必須維持不變 (clean) 狀態。
指出應該重新載入文件資料。 對於專案,環境會重新載入專案的資料。 編輯器必須透過其 ReloadDocData 實作從磁碟重新載入資料。 不論是哪一種情況,在重新載入資料時,專案或編輯器中的內容都會變更。
在現有程式碼基底中載入適當的
IVsQueryEditQuerySave2::QueryEditFiles
呼叫是一項複雜而艱鉅的任務。 因此,應在建立專案或編輯器時整合這些呼叫。
請求儲存檔案的權限
在專案或編輯器儲存檔案之前,它必須呼叫 QuerySaveFile 或 QuerySaveFiles。 對於專案檔案,這些呼叫由方案自動完成,方案知道何時儲存專案檔案。 除非 IVsPersistDocData2
的編輯器實作使用 Helper 函數 SaveDocDataToFile,否則編輯器會負責進行這些呼叫。 如果您的編輯器以這種方式實作 IVsPersistDocData2
,則會為您呼叫 IVsQueryEditQuerySave2::QuerySaveFile
或 IVsQueryEditQuerySave2::QuerySaveFiles
。
注意
請務必先行進行這些呼叫,也就是當您的編輯器能夠收到取消時。
請求在專案中新增、移除或重新命名檔案的權限
專案在新增、重新命名或移除檔案或目錄之前,必須呼叫對應的 IVsTrackProjectDocuments2::OnQuery*
方法來請求環境的權限。 如果授與權限,則專案必須完成作業,然後呼叫對應的 IVsTrackProjectDocuments2::OnAfter*
方法來通知環境作業已完成。 專案必須呼叫所有檔案 (例如:特殊檔案) 的 IVsTrackProjectDocuments2 介面方法,而不只是父檔案。 檔案呼叫是必要的,但目錄呼叫是選擇性的。 如果您的專案有目錄資訊,則它應該呼叫對應的 IVsTrackProjectDocuments2 方法,但如果它沒有這項資訊,則環境會推斷目錄資訊。
專案不應該在專案開啟或關閉時呼叫 IVsTrackProjectDocuments2
的方法。 啟動時想要此資訊的接聽程式可以等候 OnAfterOpenSolution 事件,並逐一查看方案以尋找所需的資訊。 關閉時,則不需要此資訊。 IVsTrackProjectDocuments2
由 SVsTrackProjectDocuments 提供。
每個新增、重新命名和移除動作都有一個 OnQuery*
方法和一個 OnAfter*
方法。 呼叫 OnQuery*
方法來請求新增、重新命名或移除檔案或目錄的權限。 在新增、重新命名或移除檔案或目錄且專案狀態反映新狀態後,呼叫 OnAfter*
方法。