Partilhar via


Como: Use o objeto CodeModel para analisar o código do Visual Basic

Usando o CodeModel2 hierarquia de objetos é uma alternativa para a tarefa potencialmente complexa de análise de texto em um arquivo de código. Você pode usar o CodeModel2 objeto:

  • Para analisar a estrutura do seu código.

  • sistema autônomo base para documentar seu código.

Os procedimentos a seguir pressupõem que que você saiba como acessar o ambiente de desenvolvimento de macros e criar um projeto de macro.Para obter mais informações, consulte Adicionar Projeto de Macro Caixa de diálogo caixa.

Namespaces estão contidos no nível da raiz do CodeModel2 objeto ou aninhados em outros CodeNamespace objetos. Isso reflete as restrições de sintaxe em espaços para nome.A namespace é um bloco de código de nível superior ou contido em outro namespace.Para usar os procedimentos a seguir, você deve ter um projeto em aberto no Visual Studio ambiente de desenvolvimento integrado (IDE).

Observação:

As caixas de diálogo e comandos de menu que você vê podem diferir das descritas na Ajuda de pendente no configurações ativas ou edição.Esses procedimentos foram desenvolvidos com o Geral Development Settings ativo.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio.

Para localizar todos os espaços para nome contidos no seu projeto

  • gravar um método para recuperar todos os espaços para nome em um aplicativo recursivo.

    The CodeNamespace o objeto tem um Members propriedade que contém todos os CodeElements no primeiro nível do namespace.

    ' Macro editor
    Sub FindAllNamespaces()
       Dim cm As CodeModel
       cm = DTE.Solution.Projects.Item(1).CodeModel
    
       ' Look for all the namespaces in the CodeElements
       ' of the project.
       Dim list As String
       Dim ce As CodeElement
       For Each ce In cm.CodeElements
          If TypeOf ce Is CodeNamespace Then
             GetNamespace(CType(ce, CodeNamespace), list)
          End If
       Next
    
       MsgBox(list)
    End Sub
    
    Sub GetNamespace(ByVal ns As CodeNamespace, ByRef list As String)
       ' Add this namespace to the list.
       list &= ns.Name & ControlChars.CrLf
       Dim aspace As CodeNamespace
       Dim ce As CodeElement
       ' Look for more namespaces.
       For Each ce In ns.Members
          If TypeOf ce Is CodeNamespace Then
             GetNamespace(CType(ce, CodeNamespace), list)
          End If
       Next
    End Sub
    
    Observação:

    Você pode encontrar todos os namespaces em um arquivo de origem usando o FileCodeModel propriedade das ProjectItem objeto associado com o arquivo de fonte. Essa abordagem exigiria uma alterar pequena a FindAllNamespaces método.

Localizando o Namespace padrão

O procedimento acima retorna apenas os namespaces que você definiu em seu aplicativo.Cada Visual Basic projeto também contém um espaço para nome padrão. Todos os elementos de código em seu aplicativo estão contidos no namespace padrão, embora o CodeElements coleção não contém um CodeNamespace objeto para ele. O namespace padrão pode ser recuperado de qualquer nível superior CodeType elemento.

Para localizar o namespace padrão para seu projeto

  • Os elementos de nível superior do código do projeto de teste.Qualquer elemento de código que seja um CodeType Retorna o CodeNamespace elemento para o projeto.

    Sub FindDefaultNamespace()
       Dim cm As CodeModel
       cm = DTE.Solution.Projects.Item(1).CodeModel
    
       Dim ce As CodeElement
       Dim ct As CodeType = Nothing
       Dim defNameSpace As CodeNamespace
       For Each ce In cm.CodeElements
          If TypeOf ce Is CodeType Then
             ct = CType(ce, CodeType)
             defNameSpace = ct.Namespace
          End If
       Next
    
       If Not IsNothing(defNameSpace) Then
          MsgBox(defNameSpace.Name)
       End If
    End Sub
    

Localizando classes

Declarações de classe e namespaces são recuperados por meios similares.Porque classes podem ser aninhadas em outras classes, você pode encontrar classes definidas nos namespaces e em outras classes.

Para localizar todas as classes contidas no seu projeto

  • Escreva um método recursivo, sistema autônomo a seguir para localizar sistema autônomo declarações de classe em um projeto.

    ' Macro editor
    Sub FindAllClasses()
       Dim cm As CodeModel
       cm = DTE.Solution.Projects.Item(1).CodeModel
    
       ' Look for all the namespaces and classes in the 
       ' project.
       Dim list As String
       Dim ce As CodeElement
       For Each ce In cm.CodeElements
          If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
             ' Determine whether that namespace or class 
             ' contains other classes.
             GetClass(ce, list)
          End If
       Next
    
       MsgBox(list)
    End Sub
    
    Sub GetClass(ByVal ct As CodeElement, ByRef list As String)
       ' ct could be a namespace or a class. Add it to the list
       ' if it is a class.
       If (TypeOf ct Is CodeClass) Then
          list &= ct.Name & ControlChars.CrLf
       End If
    
       ' Determine whether there are nested namespaces or classes that 
       ' might contain other classes.
       Dim aspace As CodeNamespace
       Dim ce As CodeElement
       Dim cn As CodeNamespace
       Dim cc As CodeClass
       Dim elements As CodeElements
       If (TypeOf ct Is CodeNamespace) Then
          cn = CType(ct, CodeNamespace)
          elements = cn.Members
       Else
          cc = CType(ct, CodeClass)
          elements = cc.Members
       End If
    
       For Each ce In elements
          If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
             GetClass(ce, list)
          End If
       Next
    End Sub
    

Consulte também

Tarefas

Como: Criar uma classe translation from VPE for Csharp usando o objeto CodeModel

Conceitos

Visão geral sobre o objeto CodeModel para Visual Basic e translation from VPE for Csharp Applications

Descobrir o código usando o modelo de código (Visual Basic)

Descobrir o código usando o modelo de código (Visual C#)