Como: adicionar e remover páginas de propriedades
O Project Designer fornece um local centralizado para gerenciar as propriedades do projeto, configurações e recursos em Visual Studio. Ele aparece como uma única janela na Visual Studio (IDE) do ambiente de desenvolvimento integrado e contém um número de painéis à direita que são acessadas pelas guias à esquerda. Os painéis (geralmente chamados de páginas de propriedade) no Project Designer variam de acordo com o idioma e o tipo de projeto. O Project Designer pode ser acessado com o Propriedades comando o projeto menu.
Freqüentemente, um subtipo de projeto precisa para exibir páginas de propriedades adicionais no Project Designer. Da mesma forma, alguns subtipos de projeto podem exigir que as páginas de propriedades internas sejam removidos. Para fazer qualquer um, o subtipo de projeto deve implementar a IVsHierarchy interface e substituir o GetProperty método. Substituir esse método e usando propId parâmetro que contém um dos valores da __VSHPROPID2 enumeração, você pode filtrar, adicionar ou remover propriedades do projeto. Por exemplo, talvez você precise adicionar uma página para as páginas de propriedades dependentes de configuração. Para fazer isso, você precisa filtrar páginas de propriedades dependentes de configuração e, em seguida, adicionar uma nova página à lista existente.
Adicionando e removendo as páginas de propriedades em Project Designer
Para remover uma página de propriedades em Project Designer
Substituir o GetProperty(uint itemId, int propId, out object property) método para filtrar as páginas de propriedade e obter um clsids lista.
Protected Overrides int GetProperty(uint itemId, int propId, out object property) Protected Overrides Function GetProperty(ByVal itemId As UInteger, ByVal propId As Integer, ByRef [property] As Object) As Integer 'Use propId to filter configuration-independent property pages. Select Case propId .... Case CInt(Fix(__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList)) 'Get a semicolon-delimited list of clsids of the configuration-independent property pages ErrorHandler.ThrowOnFailure(MyBase.GetProperty(itemId, propId, [property])) Dim propertyPagesList As String = ((String)[property]).ToUpper(CultureInfo.InvariantCulture) 'Remove the property page here .... .... End Select .... Return MyBase.GetProperty(itemId, propId, [property]) End Function
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); }
Remover o Build Events obtidas da página a partir de clsids lista.
Private buildEventsPageGuid As String = "{1E78F8DB-6C07-4D61-A18F-7514010ABD56}" Private index As Integer = propertyPagesList.IndexOf(buildEventsPageGuid) If index <> -1 Then ' GUIDs are separated by ';' so if you remove the last GUID, also remove the last ';' Dim index2 As Integer = index + buildEventsPageGuid.Length + 1 If index2 >= propertyPagesList.Length Then propertyPagesList = propertyPagesList.Substring(0, index).TrimEnd(";"c) Else propertyPagesList = propertyPagesList.Substring(0, index) + propertyPagesList.Substring(index2) End If End If 'New property value property = propertyPagesList
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;
Para adicionar uma página de propriedades em Project Designer
Crie uma página de propriedades que você deseja adicionar.
Class DeployPropertyPage Inherits Form Implements Microsoft.VisualStudio.OLE.Interop.IPropertyPage 'Summary: Return a stucture describing your property page. .... Public Sub GetPageInfo(ByVal pPageInfo As Microsoft.VisualStudio.OLE.Interop.PROPPAGEINFO()) Dim info As PROPPAGEINFO = New PROPPAGEINFO() info.cb = CUInt(Marshal.SizeOf(GetType(PROPPAGEINFO))) info.dwHelpContext = 0 info.pszDocString = Nothing info.pszHelpFile = Nothing info.pszTitle = "Deployment" 'Assign tab name info.SIZE.cx = Me.Size.Width info.SIZE.cy = Me.Size.Height If Not pPageInfo Is Nothing AndAlso pPageInfo.Length > 0 Then pPageInfo(0) = info End If End Sub End Class
class DeployPropertyPage : Form, Microsoft.VisualStudio.OLE.Interop.IPropertyPage { . . . . //Summary: Return a stucture 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; } }
Registre sua nova página de propriedades.
<MSVSIP.ProvideObject(GetType(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)>
[MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
Substituir o GetProperty(uint itemId, int propId, out object property) método para filtrar as páginas de propriedades, obtenha um clsids lista e adicionar uma nova página de propriedade.
Protected Overrides Function GetProperty(ByVal itemId As UInteger, ByVal propId As Integer, ByRef [property] As Object) As Integer 'Use propId to filter configuration-dependent property pages. Select Case propId .... case CInt(Fix(__VSHPROPID2.VSHPROPID_CfgPropertyPagesCLSIDList)): 'Get a semicolon-delimited list of clsids of the configuration-dependent property pages. ErrorHandler.ThrowOnFailure(MyBase.GetProperty(itemId, propId, [property])) 'Add the Deployment property page. [property] &= ";"c + GetType(DeployPropertyPage).GUID.ToString("B") End Select .... Return MyBase.GetProperty(itemId, propId, [property]) End Function
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); }
Dica
Todos os exemplos de código fornecidos neste tópico são partes de um exemplo maior, Exemplos de extensibilidade de Visual Studio.