共用方式為


新增和移除屬性頁

專案設計工具在 Visual Studio 中提供一個集中位置來管理專案屬性、設定和資源。 它會在 Visual Studio 整合式開發環境 (IDE) 中顯示為單一視窗,並在右側包含多個窗格,透過左側索引標籤存取。 專案設計工具中的窗格 (通常稱為屬性頁) 會因專案類型和語言而異。 專案設計工具可使用 [專案] 功能表上的 [屬性] 命令來存取。

專案子類型經常需要在專案設計工具中顯示其他屬性頁。 同樣地,某些專案子類型可能需要移除內建屬性頁。 要進行當中任一操作,您的專案子類型都必須實作 IVsHierarchy 介面並覆寫 GetProperty 方法。 藉由覆寫此方法並使用包含其中一個 __VSHPROPID2 列舉值的 propId 參數,您可以篩選、新增或移除專案屬性。 例如,您可能需要將頁面新增至組態相依屬性頁。 若要這麼做,您必須篩選組態相依屬性頁,然後將新頁面新增至現有的清單。

在專案設計工具中新增和移除屬性頁

移除屬性頁

  1. 覆寫 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);
    }
    
  2. 從取得的 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;
    

加入屬性頁

  1. 建立您想要新增的屬性頁。

    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;
        }
    }
    
  2. 註冊新的屬性頁。

    [MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
    
  3. 覆寫 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);
    }