Hinzufügen und Entfernen von Eigenschaftenseiten

Der Project Designer bietet einen zentralen Speicherort zum Verwalten von Projekteigenschaften, Einstellungen und Ressourcen in Visual Studio. Sie wird als einzelnes Fenster in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio angezeigt und enthält eine Reihe von Bereichen auf der rechten Seite, auf die über die Registerkarten auf der linken Seite zugegriffen wird. Die Bereiche (häufig als Eigenschaftenseiten bezeichnet) im Project Designer variieren je nach Projekttyp und Sprache. Auf den Projekt-Designer kann über den Befehl 'Eigenschaften' im Menü 'Projekt ' zugegriffen werden.

Ein Projektuntertyp muss häufig zusätzliche Eigenschaftenseiten im Project Designer anzeigen. Ebenso müssen einige Projektuntertypen möglicherweise integrierte Eigenschaftenseiten entfernt werden. Dazu muss ihr Projektuntertyp die IVsHierarchy Schnittstelle implementieren und die GetProperty Methode überschreiben. Indem Sie diese Methode außer Kraft setzen und den Parameter verwenden propId , der einen der Werte der __VSHPROPID2 Enumeration enthält, können Sie Projekteigenschaften filtern, hinzufügen oder entfernen. Beispielsweise müssen Sie möglicherweise eine Seite zu den konfigurationsabhängigen Eigenschaftenseiten hinzufügen. Dazu müssen Sie konfigurationsabhängige Eigenschaftenseiten filtern und dann der vorhandenen Liste eine neue Seite hinzufügen.

Hinzufügen und Entfernen von Eigenschaftenseiten in Project Designer

Entfernen einer Eigenschaftenseite

  1. Überschreiben Sie die GetProperty(uint itemId, int propId, out object property) Methode zum Filtern von Eigenschaftenseiten und Abrufen einer clsids Liste.

    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. Entfernen Sie die Seite "Buildereignisse " aus der abgerufenen clsids Liste.

    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;
    

Hinzufügen einer Eigenschaftenseite

  1. Erstellen Sie eine Eigenschaftenseite, die Sie hinzufügen möchten.

    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. Registrieren Sie ihre neue Eigenschaftenseite.

    [MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
    
  3. Überschreiben Sie die GetProperty(uint itemId, int propId, out object property) Methode zum Filtern von Eigenschaftenseiten, Abrufen einer clsids Liste und Hinzufügen einer neuen Eigenschaftenseite.

    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);
    }