Udostępnij za pośrednictwem


Jak: obiekt CodeModel jest używany do analizowania kodu języka Visual Basic

Za pomocą CodeModel2 hierarchii obiektów stanowi alternatywę dla złożonych zadań analizowania tekstu w pliku kodu.Można użyć CodeModel2 obiekt:

  • Aby analizować strukturę kodu.

  • Jako podstawę do dokumentowania kodu.

Poniższe procedury założono, że wiesz, jak uzyskać dostęp do środowiska programowania makr i utworzyć projekt makra.Aby uzyskać więcej informacji, zobacz Add Macro Project Dialog Box.

Obszary nazw są zawarte na poziomie katalogu głównego CodeModel2 obiektu lub zagnieżdżone w innych CodeNamespace obiektów.Odzwierciedla to Składnia ograniczenia przestrzeni nazw.Obszar nazw jest blokiem kodu najwyższego poziomu lub zawartych w innej przestrzeni nazw.Aby skorzystać z następujących procedur, musi mieć projektu, Otwórz w Visual Studio zintegrowane środowisko dewelopowania (IDE).

[!UWAGA]

Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Procedury te zostały opracowane z ogólnych ustawień rozwoju aktywnych.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.

Aby znaleźć wszystkie obszary nazw zawartych w projekcie

  • Napisz Metoda cykliczna pobrać wszystkie obszary nazw aplikacji.

    CodeNamespace Obiekt ma Members właściwość, która zawiera wszystkie CodeElements na pierwszym poziomie obszaru nazw.

    ' 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
    

    [!UWAGA]

    Wszystkie obszary nazw można znaleźć w jednym pliku źródłowym, za pomocą FileCodeModel właściwość ProjectItem obiektu skojarzonego z plikiem źródłowym.Za pomocą tego podejścia wymagałoby nieznaczne zmiany do FindAllNamespaces metody.

Znajdowanie domyślny obszar nazw

Powyższa procedura zwraca tylko obszary nazw zdefiniowanych w aplikacji.Każdy Visual Basic project zawiera także domyślny obszar nazw.Wszystkie elementy kodu w aplikacji są zawarte w domyślny obszar nazw, chociaż CodeElements nie zawiera kolekcji CodeNamespace obiektu dla niego.Domyślny obszar nazw, które można pobrać z każdym najwyższego poziomu CodeType element.

Aby znaleźć domyślny obszar nazw dla projektu

  • Test elementów najwyższego poziomu kodu projektu.Każdy element kod, który jest CodeType zwraca CodeNamespace elementu projektu.

    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
    

Wyszukiwanie klas

Deklaracje klas i przestrzenie nazw są pobierane za pośrednictwem podobnych środków.Ponieważ klasy mogą być zagnieżdżane w innych klas, można znaleźć klas zdefiniowanych, zarówno w obszarach nazw, jak i w innych klasach.

Aby znaleźć wszystkich klas zawartych w projekcie

  • Napisać metodę cyklicznych, takich jak ten, który następuje, aby znaleźć deklaracje klas w projekcie.

    ' 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
    

Zobacz też

Zadania

Jak: Tworzenie klasy C# za pomocą obiektu CodeModel

Koncepcje

Omówienie obiektu CodeModel dla języka Visual Basic i C# aplikacji

Odkrywanie kod przy użyciu modelu kodu (Visual Basic)

Odkrywanie kod przy użyciu modelu kodu (Visual C#)