كيفية القيام بما يلي: استخدام كائن CodeModel إلى تحليل التعليمات البرمجية لـ Visual Basic

باستخدام CodeModel2هيكلي كائن يتم بديل إلى مهمة المعقدة التي من المحتمل أن تكون من تحليل النص في ‏‏رمز الملف. يمكنك استخدام الخيار CodeModel2:

  • إلى لتحليل بنية تعليمات برمجية الخاصة بك.

  • كأساس توثيق تعليمات برمجية الخاصة بك.

تفترض الإجراءات التي تتبع معرفة كيفية الوصول إلى بيئة تطوير وحدات الماكرو وإنشاء مشروع ماكرو. لمزيد من المعلومات، راجع إضافة مربع الحوار مشروع ماكرو.

مساحات الاسم مضمنة في المستوى الجذر CodeModel2الكائن أو تداخلها أخرى CodeNamespaceالكائنات. يعكس هذا قيود بناء مساحات الاسم. مساحة الاسم إما أن حظر التعليمات برمجية ذات المستوى أعلى أو المضمنة في مساحة الاسم آخر. إلى استخدام الإجراءات التالية, يجب أن يكون لديك مشروع فتح في Visual Studioبيئة التطوير المتكاملة (IDE).

ملاحظة

قد تختلف مربعات الحوار وأوامر القائمة التى تشاهدها الان عن تلك الموصوفة في التعليمات اعتماداً على الإعدادات النشطة أو الإصدار الخاص بك. تم تطوير هذه الإجراءات من خلال "إعدادات تطوير عام" النشط. لتغيير الإعدادات الخاصة بك, اختر إعدادات الاستيراد و التصدير ضمن القائمة أدوات . لمزيد من المعلومات، راجع العمل مع إعدادات.

للبحث عن الكل مساحات الاسم الموجودة في المشروع

  • كتابة أسلوب العودية لاسترداد الكل مساحات الاسم في تطبيق ما.

    CodeNamespaceيحتوي الكائن Membersالخاصية التي تحتوي على الكل CodeElementsفي المستوى الأول من مساحة الاسم.

    ' 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
    

    ملاحظة

    يمكنك العثور على الكل مساحات الأسماء في أحد الملف المصدر باستخدام FileCodeModelخاصية ProjectItemالمقترنة مع الكائن الملف المصدر. باستخدام هذه الطريقة قد يتطلب إجراء تغيير بسيط إلى FindAllNamespaces الأسلوب.

البحث عن مساحة الاسم الافتراضية

إرجاع الإجراء أعلاه فقط مساحات الاسم قمت بتعريفه في التطبيق الخاص بك. كل Visual Basicيحتوي أيضاً المشروع على مساحة الاسم الافتراضية. يتم تضمين الكل عناصر تعليمات برمجية في التطبيق الخاص بك في مساحة الاسم الافتراضية على الرغم من أن CodeElementsلا يحتوي على مجموعة CodeNamespaceكائن it. يمكن استرداد مساحة الاسم الافتراضية من أي المستوى الأعلى CodeTypeالعنصر.

إلى العثور على مساحة الاسم الافتراضية للمشروع

  • اختبار عناصر تعليمات برمجية ذات المستوى الأعلى من المشروع. أي عنصر تعليمات برمجية تم CodeTypeإرجاع CodeNamespaceعنصر المشروع.

    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
    

البحث عن فئات

الفئة التعريفات و مساحات الاسم استرداده بطرق مشابهة. لأنه يمكن أن تتداخل الفئات في الفئات الأخرى, يمكنك العثور على تعريف فئات كلاهما في مساحات الاسم وفي الفئات الأخرى.

إلى بحث الكل الفئات الموجودة في المشروع

  • كتابة أسلوباً العودية مثل الذي يتبع إلى البحث عن تعريفات الفئات في مشروع.

    ' 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
    

راجع أيضًا:

المهام

كيفية القيام بما يلي: إنشاء فئة C# عن طريق استخدام كائن CodeModel

المبادئ

نظرة عامة حول كائن CodeModel لـ Visual Basic و C# للتطبيقات

اكتشاف التعليمات البرمجية باستخدام "نموذج التعليمات البرمجية" (Visual Basic)

اكتشاف التعليمات البرمجية باستخدام "نموذج التعليمات البرمجية" (Visual C#)