Partilhar via


Design de subtipos do projeto

Subtipos do projeto permitem que os VSPackages estender projetos baseados em Microsoft Build Engine (MSBuild). O uso de agregação permite reutilizar a maior parte do sistema gerenciado de núcleo projeto implementado em Visual Studio , porém ainda personalizar o comportamento para uma situação específica.

Os tópicos a seguir detalham o projeto básico e a implementação dos subtipos de projeto:

  • Design de subtipo de projeto.

  • Agregação de vários níveis.

  • Oferecendo suporte a Interfaces.

Design de subtipo de projeto

A inicialização de um subtipo de projeto é obtida ao agregar principal IVsHierarchy e IVsProject objetos. Esta agregação permite que um subtipo de projeto de substituir ou aumentar a maioria dos recursos do projeto base. Os subtipos de projeto obtém a primeira chance para manipular propriedades usando IVsHierarchy, comandos usando IOleCommandTarget e IVsUIHierarchye o gerenciamento de item de projeto usando IVsProject3. Também podem estender os subtipos de projeto:

  • Objetos de configuração do projeto.

  • Objetos dependentes de configuração.

  • Objetos de configuração independente de procurar.

  • Objetos de automação do projeto.

  • Coleções de propriedade de automação de projeto.

Para obter mais informações sobre extensibilidade por subtipos de projeto, consulte Propriedades e métodos estendidos por subtipos de projeto.

Arquivos de política

O Visual Studio ambiente fornece um exemplo de estender o sistema de projeto base com um subtipo de projeto em sua implementação dos arquivos de diretivas. Um arquivo de diretiva permite a modelagem da Visual Studio o ambiente por meio do gerenciamento de recursos que incluem o Solution Explorer, Add Project caixa de diálogo, Add New Item caixa de diálogo e o Propriedades caixa de diálogo. O subtipo de diretiva substitui e aprimora esses recursos por meio de IVsFilterAddProjectItemDlg, IOleCommandTarget e IVsUIHierarchy implementações.

Mecanismo de agregação

Mecanismo de agregação de subtipo de projeto do ambiente oferece suporte a vários níveis de agregação, permitindo assim que um subtipo avançado a serem implementados por mais de um projeto flavored flavoring. Além disso, os objetos de suporte de um projeto de subtipo, tais como IVsProjectFlavorCfg, são projetados para permitir vários níveis de disposição em camadas. Acompanhando as restrições de COM e COM regras de agregação, subtipos de projeto e projetos de base precisam ser programados de forma cooperativa para permitir o subtipo interno ou o projeto base participem adequadamente em chamadas de método de delegação e gerenciar contagens de referência. Ou seja, o projeto prestes a ser agregados precisa estar programado para oferecer suporte a agregação.

A ilustração a seguir mostra uma representação esquemática de uma agregação de subtipo de projeto em vários níveis.

Subtipo de projeto de vários níveis

Gráfico de projectflavor de vários níveis do Visual Studio

Uma agregação de subtipo de vários níveis de projeto consiste em três níveis, um projeto de base, que é agregadas por um subtipo de projeto, então agregadas por um subtipo de projeto Avançado. A figura se concentra em algumas das interfaces de suporte que são fornecidas como parte do Visual Studio a arquitetura de subtipo de projeto.

Mecanismos de implantação

Entre muitas do sistema básico de projeto aprimoradas por um subtipo de projeto de funcionalidades são mecanismos de implantação. Um subtipo de projeto influencia os mecanismos de implantação por meio da implementação de interfaces de configuração (como IVsDeployableProjectCfg e IVsBuildableProjectCfg) que são recuperados pela chamada QueryInterface em IVsProjectCfgProvider. Em um cenário onde tanto o subtipo de projeto e o subtipo de projeto avançado adicionam implementações diferentes de configuração, o projeto base chama QueryInterface sobre o subtipo de projeto avançado IUnknown. Se o subtipo de projeto interno contém a implementação de configuração que está solicitando o projeto básico, o subtipo de projeto avançado delega a implementação fornecida pelo subtipo de projeto interno. Como um mecanismo para persistir o estado do nível de agregação de um para outro, todos os níveis dos subtipos de projeto implementam IPersistXMLFragment persistir não-compilação relacionadas a dados XML nos arquivos do projeto. Para obter mais informações, consulte Manter os dados no arquivo de projeto MSBuild. IInternalExtenderProvideré implementado como um mecanismo para recuperar os extensores de automação de subtipos de projeto.

A ilustração a seguir destaca a implementação de extensor de automação, procurar objeto de configuração do projeto em particular, usado por subtipos de projeto para estender o sistema de projeto base.

Extensor de automação do subtipo de projeto.

Gráfico de extensor de automático de tipo de projeto do VS

Subtipos do projeto podem ampliar ainda mais o sistema de projeto base, estendendo o modelo de objeto de automação. Estes são definidos como parte do objeto de automação DTE e são usados para estender o objeto de projeto, o ProjectItem objeto e o Configuration objeto. Para obter mais informações, consulte: Extensão do modelo de objeto do projeto Base.

Agregação de vários níveis

Uma implementação de subtipo de projeto que envolve um subtipo de projeto de nível inferior precisa ser programados de forma cooperativa para permitir que o subtipo de projeto interno funcionar corretamente. Uma lista de responsabilidades de programação inclui:

  • O IPersistXMLFragment a implementação do subtipo projeto disposto o subtipo interno deve delegar para o IPersistXMLFragment a implementação do subtipo projeto interno para ambos Load e Save métodos.

  • O IInternalExtenderProvider a implementação do subtipo de projeto de wrapper deve delegar do seu subtipo de projeto interno. Em particular, a implementação de GetExtenderNames precisa obter a seqüência de caracteres de nomes do subtipo de projeto interno e, em seguida, concatenar as seqüências de caracteres que deseja adicionar como extensores.

  • O IVsProjectCfgProvider a implementação de um subtipo de projeto de wrapper deve instanciar o IVsProjectFlavorCfg o objeto de seu interna subtipo de projeto e mantê-la como um evento particular, já que somente do projeto básico projeto objeto de configuração diretamente sabe que o objeto de configuração de subtipo de projeto de wrapper existe. O subtipo de projeto externa pode inicialmente escolha interfaces de configuração que deseja manipular diretamente e, em seguida, delegue o resto à implementação do subtipo de projeto interno do get_CfgType.

Interfaces de suporte.

O projeto base delega chamadas para oferecer suporte a interfaces adicionados por um subtipo de projeto, para estender a vários aspectos da sua implementação. Isso inclui a extensão de objetos de configuração do projeto e vários objetos de navegador de propriedade. Essas interfaces são recuperadas pela chamada QueryInterface na punkOuter (um ponteiro para o IUnknown) do agregador de subtipo de projeto mais externo.

Interface

Subtipo de projeto

IVsProjectFlavorCfg

Permite que o subtipo de projeto para:

  • Fornecer uma implementação de IVsDeployableProjectCfg.

  • Controlar o lançamento do depurador, permitindo que o subtipo de projeto fornecer sua própria implementação de IVsDebuggableProjectCfg.

  • Desativar a avaliação da expressão de tempo de design ao manipular adequadamente a DBGLAUNCH_DesignTimeExprEval maiúsculas em sua implementação de QueryDebugLaunch.

IInternalExtenderProvider

Permite que o subtipo de projeto para:

  • Estender a VSHPROPID_BrowseObject do projeto para adicionar ou remover propriedades independente da configuração do projeto.

  • Ampliar o objeto de automação do projeto (VSHPROPID_ExtObject) do projeto.

Valores de propriedade acima são tirados de __VSHPROPID2 enumeração.

IVsCfgBrowseObject

Permite que o subtipo de projeto mapear novamente para o IVsCfg objeto fornecido Procurar objeto de configuração do projeto.

IVsBrowseObject

Permite que o subtipo de projeto mapear novamente para o IVsHierarchy ou o VSITEMID o objeto, dado a procurar objeto de configuração do projeto.

IPersistXMLFragment

Permite que o subtipo de projeto persistir os dados XML estruturado arbitrários ao arquivo de projeto (. vbproj ou. csproj). Esses dados não são visíveis para MSBuild.

IVsBuildPropertyStorage

Permite que o subtipo de projeto para:

  • Adicione novas propriedades do MSBuild a serem conservados.

  • Remova propriedades desnecessárias do MSBuild.

  • Consulta para um valor atual de uma propriedade do MSBuild.

  • Altere o valor atual de uma propriedade do MSBuild.

Consulte também

Referência

__VSPROPID

__VSPROPID2