新增和移除屬性頁
專案設計工具在 Visual Studio 中提供一個集中位置來管理專案屬性、設定和資源。 它會在 Visual Studio 整合式開發環境 (IDE) 中顯示為單一視窗,並在右側包含多個窗格,透過左側索引標籤存取。 專案設計工具中的窗格 (通常稱為屬性頁) 會因專案類型和語言而異。 專案設計工具可使用 [專案] 功能表上的 [屬性] 命令來存取。
專案子類型經常需要在專案設計工具中顯示其他屬性頁。 同樣地,某些專案子類型可能需要移除內建屬性頁。 要進行當中任一操作,您的專案子類型都必須實作 IVsHierarchy 介面並覆寫 GetProperty 方法。 藉由覆寫此方法並使用包含其中一個 __VSHPROPID2 列舉值的 propId
參數,您可以篩選、新增或移除專案屬性。 例如,您可能需要將頁面新增至組態相依屬性頁。 若要這麼做,您必須篩選組態相依屬性頁,然後將新頁面新增至現有的清單。
在專案設計工具中新增和移除屬性頁
移除屬性頁
覆寫
GetProperty(uint itemId, int propId, out object property)
方法以篩選屬性頁並取得clsids
清單。protected override int GetProperty(uint itemId, int propId, out object property) { //Use propId to filter configuration-independent property pages. switch (propId) { . . . . case (int)__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList: { //Get a semicolon-delimited list of clsids of the configuration-independent property pages ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property)); string propertyPagesList = ((string)property).ToUpper(CultureInfo.InvariantCulture); //Remove the property page here . . . . } . . . . } . . . . return base.GetProperty(itemId, propId, out property); }
從取得的
clsids
清單中移除 [建置事件] 頁面。string buildEventsPageGuid = "{1E78F8DB-6C07-4D61-A18F-7514010ABD56}"; int index = propertyPagesList.IndexOf(buildEventsPageGuid); if (index != -1) { // GUIDs are separated by ';' so if you remove the last GUID, also remove the last ';' int index2 = index + buildEventsPageGuid.Length + 1; if (index2 >= propertyPagesList.Length) propertyPagesList = propertyPagesList.Substring(0, index).TrimEnd(';'); else propertyPagesList = propertyPagesList.Substring(0, index) + propertyPagesList.Substring(index2); } //New property value property = propertyPagesList;
加入屬性頁
建立您想要新增的屬性頁。
class DeployPropertyPage : Form, Microsoft.VisualStudio.OLE.Interop.IPropertyPage { . . . . //Summary: Return a structure describing your property page. public void GetPageInfo(Microsoft.VisualStudio.OLE.Interop.PROPPAGEINFO[] pPageInfo) { PROPPAGEINFO info = new PROPPAGEINFO(); info.cb = (uint)Marshal.SizeOf(typeof(PROPPAGEINFO)); info.dwHelpContext = 0; info.pszDocString = null; info.pszHelpFile = null; info.pszTitle = "Deployment"; //Assign tab name info.SIZE.cx = this.Size.Width; info.SIZE.cy = this.Size.Height; if (pPageInfo != null && pPageInfo.Length > 0) pPageInfo[0] = info; } }
註冊新的屬性頁。
覆寫
GetProperty(uint itemId, int propId, out object property)
方法來篩選屬性頁,取得clsids
清單並加入新屬性頁。protected override int GetProperty(uint itemId, int propId, out object property) { //Use propId to filter configuration-dependent property pages. switch (propId) { . . . . case (int)__VSHPROPID2.VSHPROPID_CfgPropertyPagesCLSIDList: { //Get a semicolon-delimited list of clsids of the configuration-dependent property pages. ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property)); //Add the Deployment property page. property += ';' + typeof(DeployPropertyPage).GUID.ToString("B"); } } . . . . return base.GetProperty(itemId, propId, out property); }