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