共用方式為


How to: 實作巢狀的專案

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

當您建立的巢狀的專案類型都必須實作幾個額外步驟。 父專案會採用的相同方案中有其巢狀 (子系) 專案的責任。 父專案是類似於方案的專案的容器。 特別是,有幾個解決方案,若要建立巢狀專案的階層的父專案所必須引發的事件。 建立巢狀的專案的下列程序會說明這些事件。

若要建立巢狀的專案

  1. 整合式的開發環境 (IDE) 載入父專案的專案檔和啟動資訊,藉由呼叫IVsProjectFactory介面。 父專案已建立,並加入至方案。

    注意

    此時,則還太早父專案來建立巢狀的專案,因為必須建立父專案,才能建立子專案的程序。 遵循此順序中,父專案可以將設定套用至子專案和子專案可以取得父專案中的資訊,如有需要。 此序列是如果需要在原始程式碼控制 (SCC) 等方案總管] 中的用戶端。

    父專案必須等候OpenChildren方法呼叫 ide,才能建立其巢狀 (子) 專案。

  2. IDE 呼叫QueryInterface上父專案IVsParentProject。 如果這個呼叫會成功,IDE 呼叫OpenChildren開啟父專案的巢狀專案的所有父系的方法。

  3. 父專案呼叫FireOnBeforeOpeningChildren即將建立方法來通知巢狀專案的接聽程式。 SCC,比方說,接聽這些事件才能知道是否方案和專案建立程序中的步驟所發生的順序。 如果步驟發生故障,解決方案可能無法登錄與原始程式碼控制正確。

  4. 父專案呼叫AddVirtualProject方法或AddVirtualProjectEx上它的子專案的每個方法。

    您傳遞__VSADDVPFLAGSAddVirtualProject方法,指出虛擬 (巢狀) 專案,應該加入專案] 視窗中,從組建排除加入至原始程式碼控制,依此類推。 VSADDVPFLAGS可讓您控制巢狀專案的可見性,並指出哪些功能是與它相關聯。

    如果您重新載入先前已存在的子專案包含的專案儲存在父專案的專案檔案中的父專案呼叫 GUID AddVirtualProjectEx。 唯一的差別AddVirtualProjectAddVirtualProjectEXAddVirtualProjectEX具有參數,以便讓父專案,以指定每個執行個體guidProjectID的子專案,以啟用GetProjectOfGuidGetProjectOfProjref才能正確運作。

    如果沒有 GUID,例如當您新增新的巢狀的專案時,方案就會建立一個專案加入至上次。 它負責父專案來保存該專案在其專案檔中的 GUID。 如果您刪除巢狀的專案,也可以刪除該專案的 GUID。

  5. IDE 呼叫M:Microsoft.VisualStudio.Shell.Interop.IVsParentProject.OpenChildren父專案的每一個子專案上的方法。

    父專案必須實作IVsParentProject如果您想要建立巢狀專案。 但父專案永遠不會呼叫QueryInterfaceIVsParentProject即使它具有父系底下的專案。 解決方案會處理呼叫IVsParentProject,則如果實作時,會呼叫OpenChildren來建立巢狀的專案。 AddVirtualProjectEX一定從呼叫OpenChildren。 它應該永遠不會由父專案,以保留階層建立事件的順序呼叫。

  6. IDE 呼叫OnAfterOpenProject子專案上的方法。

  7. 父專案呼叫FireOnAfterOpeningChildren方法來通知父系的子專案已建立的接聽程式。

  8. IDE 呼叫FireOnAfterOpenProject父專案之後,已經開啟所有的子專案上的方法。

    父專案如果已經存在,會建立每個巢狀專案的 GUID,藉由呼叫CoCreateGuid

    注意

    CoCreateGuid是要建立 GUID 時呼叫 COM API。 如需詳細資訊,請參閱CoCreateGuid和 MSDN Library 中的 Guid。

    父專案會儲存在其專案檔案中擷取下一次,它會在 IDE 中開啟此 GUID。 請參閱步驟 4,如需詳細資訊與相關的呼叫AddVirtualProjectEX擷取guidProjectID子專案。

  9. GetProperty為父項目識別碼,然後呼叫方法依慣例您將委派中巢狀專案。 GetProperty擷取內嵌了您想要呼叫其父系時,委派中的專案節點的屬性。

    父和子專案具現化以程式設計的方式,因為您可以在此時設定巢狀專案的屬性。

    注意

    不只執行巢狀專案中,從接收的內容資訊,但您也可以要求父專案是否有檢查該項目的任何內容VSHPROPID_UserContext。 如此一來,您可以加入額外的動態說明的屬性及功能表選項,指定個別的巢狀專案。

  10. 在方案總管] 中顯示與呼叫建置階層GetNestedHierarchy方法。

    您將階層架構傳遞至透過環境GetNestedHierarchy若要建立以便在方案總管] 中顯示階層。 在這種方式,方案會知道專案存在並可管理建置的組建管理員,或可以允許將原始程式碼控制之下專案中的檔案。

  11. 建立專案&1; 的所有巢狀的專案後,控制權會傳遞回至方案和程序會重複 Project2。

    具有子元素的子專案,就會發生同樣的程序來建立巢狀的專案。 在此情況下,如果 BuildProject1 Project1 的子系會有子專案時,它們就會建立之後 BuildProject1 和 Project2 之前。 程序遞迴而且階層是從上向下。

    因為使用者關閉方案或特定專案本身,另一個方法上,當關閉巢狀的專案IVsParentProjectCloseChildren,會呼叫。 父專案會將對RemoveVirtualProject方法OnBeforeClosingChildrenOnAfterClosingChildren通知,關閉巢狀的專案的方案的事件接聽程式的方法。

下列主題處理實作巢狀的專案時所應考量的其他幾個概念︰

卸載並重新載入巢狀專案的考量

巢狀專案的精靈支援

實作命令處理巢狀專案

篩選巢狀專案 AddItem 對話方塊

另請參閱

加入項目來加入新項目對話方塊
註冊專案和項目範本
檢查清單︰ 建立新的專案類型
內容參數
精靈 (。Vsz) 檔案