كيفية القيام بما يلي: استخدام كائن 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#)