استكشاف أخطاء Visual Basic و ‏‫#Visual C الامتداد

فيما يلي الأساليب المعالجة لبعض المشاكل القابلة للتوسعة والشائعة اكثر التي قد تواجهها عند تطوير تطبيق التوافق مع البرامج الخارجية للحصول Visual Basicأو #Visual Cالمشروع.

في حالة عدم ظهور مشكلة معينة في هذه القائمة, راجع MSDN الدعم متصل في https://support.microsoft.com MSDN الدعم متصل للحصول على مزيد من المعلومات.

إضافة و إزالة الأساليب في CodeModel التي لا تعمل .

إضافة "و" إزالة أساليب الفئات المختلفة CodeModel2الكائن غير معتمد في Visual Basicالمشاريع. استدعاء أحد الأساليب التالية سوف تحصل على خطأ "لم يتم التطبيق". الأساليب غير معتمدة:

AddAttribute

AddBase

AddClass

AddDelegate

AddEnum

AddFunction

AddImplementedInterface

AddInterface

AddNameSpace

AddParameter

AddProperty

AddStruct

AddVariable

RemoveInterface

RemoveMember

RemoveMethod

RemoveParameter

 

لإضافة عناصر تعليمات برمجية إلى التطبيق من خلال ماكرو استخدام ميزات طراز القابلية لتوسعة تحرير النص. للحصول على التفاصيل، راجع كيفية القيام بما يلي: استخدام ماكرو لإضافة نص في Visual Basic أو C# تعليمات برمجية المحرر والذي يحتوي على مثال عن كيفية إضافة رمز إلى ملف المصدر. Visual Studioطراز القابلية للتوسعة العام يحتوي على عدة كائنات مفيدة للقراءة و تعديل تعليمات برمجية المصدر. أنها تضمين Documentالكائن، TextDocumentالكائن، EditPointالكائن، TextPointالكائن، و VirtualPointالكائن.

لا يمكن تغيير خصائص الكائنات CodeModel.

معظم الخصائص في CodeModel2تطبيق كحقول للقراءة فقط بالنسبة Visual Basicالمشاريع. في حالة محاولة إلى تعيين خاصية في وقت التشغيل الحصول على خطأ "لم يتم التطبيق". تتضمن الخصائص للقراءة فقط:

الوصول

CanOverride

تعليق

DocComment

getter

InitExpression

IsAbstract

IsConstant

IsShared

MustImplement

setter

 

إلى تغيير قيمة CodeModel2خاصية الكائن تغيير تعريف عنصر تعليمات برمجية في الملف المصدر. يمكنك القيام بذلك بطريقتين:

فشل المكالمات إلى كائن CodeElement.

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

لا توجد أية خاصية يمكنك اختبار تحديد ما إذا كان المرجع ما يزل صالحا. يمكنك تجنب هذه المشكلات باستخدام أساليب البرمجة الفعالة.

تريد تحرير تعليمات برمجية ماكرو في "محرر نصوص جهاز.

قد تكون هناك حالات عندما تحتاج إلى تحرير الملف ماكرو في محرر نص. لحفظ ملف الماكرو في نص عادي تشغيل ملف ، انقر فوق الأمر يصدّر . عند ظهور مربع حوار يصدّر ملف اكتب اسم ملف اليصدّر التي تريدها إلى إنشاء. سيتم حفظ الملف كملف Visual Basicالملف المصدر مع ملحق .vb.

الأمر العنصر "إضافة الموجودة" في القائمة ملف تسمح لك بإضافة Visual Basicالملف المصدر إلى مشروع الماكرو الخاص بك.

لمزيد من المعلومات، راجع كيفية: إدارة وحدات الماكرو.

أتصل الحصول على رسائل حول العناصر غير متوفر.

قد يتم عرض كائن بين مجموعة الرسائل الخطأ في حالة تغير بنية المشروع بينما يتم الضغط تعليمات برمجية مرجع إلى أحد الكائنات القابلية للتوسعة. قد يحدث هذا عندما:

  • تم مغلق مشروع في بيئة التطوير. في هذه الحالة، Projectالمرجع إليه يصبح غير صالح ، كما ستقوم الكائنات المضمنة في المشروع. إذا استخدمت هذا Projectمرجع ربما لإضافة ملف إلى مشروع، يفشل الأسلوب. على سبيل المثال، الماكرو التالي بإرجاع "مشروع" غير متوفر عند محاولة الوصول إلى proj.Name:

    ' Macro editor
    Public Sub AccessAClosedProject()
       Dim proj As Project = DTE.Solution.Projects.Item(1)
       DTE.Solution.Close()
       MsgBox(proj.Name)
    End Sub
    
  • تم الحذف ملف من المشروع. على سبيل المثال، الماكرو التالي بإرجاع "مشروع" غير متوفر عند محاولة الوصول إلى projItem.Name:

    ' Macro editor
    Public Sub AccessADeletedFile()
       Dim proj As Project = DTE.Solution.Projects.Item(1)
       Dim projItem As ProjectItem = proj.ProjectItems.Item(1)
       proj.ProjectItems.Item(1).Delete()
       MsgBox(projItem.Name)
    End Sub
    
  • تم الحذف مرجع من المشروع. على سبيل المثال، يرجع الماكرو التالي "قام الخادم بتحديد استثناء" عند محاولة الوصول إلى ref.Name:

    ' Macro editor
    Public Sub AccessARemovedReference()
       Dim vsproj As VSProject = _
          CType(DTE.Solution.Projects.Item(1).Object, VSProject)
       Dim ref As Reference = vsproj.References.Item(1)
       vsproj.References.Item(1).Remove()
       MsgBox(ref.Name)
    End Sub
    
  • التحكم بمصادر المتغييرات يتسبب بإعادة التحميل المشروع. في هذه الحالة، تصبح الكائنات القديمة غير صحيحة. على سبيل المثال، تحدث إعادة التحميل إذا كان الفحص خارج المشروع وملف إصدار جديد موجود في قاعدة بيانات عنصر التحكم المصدر. كما في المثال آخر إعادة تحميل يحدث عندما يودع ملف المشروع يجب أن يتم دمجها مع الملفات الموجودة في عنصر تحكم المصدر.

  • مشروع العنصر يُحفظ باستخدام الأمر حفظ باسم . يؤدي هذا إلى إنشاء جديد ProjectItemكائن الملف. يصبح الكائن الأصلي غير صالح.

  • أي شيئ يحدث تيسبب اعادة تحميل المشروع.

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

اريد إنشاء مشروع جديد و اريد ظهور أي رسائل الخطأ .

عند استخدام AddFromFileالأسلوب، تظهر مربعات الحوار المتعددة عند حدوث أخطاء أثناء إنشاء المشروع. LaunchWizardيمكن أن يُستخدم الأسلوب إلى منع إنشاء المشاريع الجديدة واجهة المستخدم. عند استدعاء LaunchWizardلإنشاء مشروع جديد من المشروع القابل لتوسعة السلوك الافتراضي عرض أخطاء في مربعات الرسائل.

LaunchWizardأسلوب يأخذ الوسيطتين عند تشغيل المشروع المعالج جديد. الوسيط الأول هو اسم ملف المعالج (.vsz ملف). الوسيط الثاني عبارة عن صفيف قيم يتم تمريرها إلى المعالج عند تشغيله. بواسطة تعيين العنصر السابع من الصفيف إلى true, يمكنك فرض الأخطاء بطرح الاستثناءات التي قد أن يدخل في ذلك في Try...Catchبنية. يتوقع المعالج "تطبيقات Windows جديدة" القيم التالية في الصفيف:

فهرس صفيف

Value

0

WizardType معرّف فريد عالمي يشير إلى نوع المعالج. معالج مشروع جديد هو معرّف فريد عالمي "{0F90E1D0-4999-11 D 1-B6D1-00A0C90F2744}".

1

اسم_المشروع سلسلة اسم المشروع الجديد.

2

الدليل المحلي سلسلة تحتوي على مسار كامل إلى المجلد أين سيتم إنشاء مشروع جديد.

3

دليل التثبيت, سلسلة تحتوي على المجلد أين Visual Studioمثبت.

4

حصري القيمة المنطقية تشير إلى ما إذا كان يجب اغلاق أية حلول مفتوحة موجودة.

5

اسم حل اسم سلسلة لملف الحل بدون مسار أو ملحق.

6

صمت، قيمة منطقية تشير إلى ما إذا كان يجب تشغيل المعالج بدون مطالبة.

الماكرو التالي يوضح كيف يتم استخدام صمت يؤشر عند استدعاء المعالج. إذا قمت بتشغيل هذا الماكرو مرة واحدة سيتم التشغيل دون أخطاء توفير المشروع والدليل لم تكن بالفعل موجودة. يمكن رفع الخطأ إذا قمت بتشغيل هذا الماكرو مرة ثانية. منذ أن تم تعيين علامة التلقائي إلى true، ‏‏ استثناء مصادفة بواسطة Try...Catchحظر.

' Macro editor
Sub RunLaunchWizard()
   Dim params() As Object = New Object() { _
      "{0F90E1D0-4999-11D1-B6D1-00A0C90F2744}", _
      "NewProjectName", _
      "NewProjectPath", _
      "", _
      False, _
      "", _
      True}  ' -->  This is the "Silent" flag ... TRUE=No UI, FALSE=UI
   Dim res As EnvDTE.wizardResult
   Dim s As String = _
      DTE.Solution.TemplatePath(VSLangProj.PrjKind.prjKindVBProject)

   Try
      res = DTE.LaunchWizard(s & "WindowsApplication.vsz", params)
   Catch e1 As System.Exception
      MsgBox("Cannot create new project.")
   End Try
End Sub

ما هو HRESULT: 0x80047E2C."

يمكن أن يحدث هذا الخطأ عندما تقوم بمعالجة CodeModel2الكائنات من Visual Basicملفات مصدر.

عندما يتم كتابة تعليمات برمجية التي تحافظ عليها مراجع إلى CodeElement2كائنات يجب عليك أن تدرك أنه يمكن تغيير تعليمات برمجية المصدر الأساسي أثناء الضغط مرجع. قد يكون تم الحذف عنصر تعليمات برمجية أو إعادة تسميته أو تضمينها في خطأ المحول برمجي. عندما يحدث هذا، أي استدعاءات CodeElement2الكائن بإرجاع رسالة خطأ "‏‏ استثناء من HRESULT: 0x80047E2C."

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

توضح "وحدات الماكرو التالية كيفية قد يحدث هذا الخطأ. إضافة فئة بالاسم LostClass إلى المشروع. جعل هذا فئة المستوى أعلى ليست داخل مساحة الاسم أو الفئة. قم بتشغيل الماكرو SetElement يحذف هذه الفئة ثم قم بتشغيل الماكرو GetElement. عند تشغيل GetElement الفئة لا تعد موجودة مرجع lostClass غير صالح ثم إرجاع الخطأ.

Public Module CreateLostClass
    Dim lostClass As CodeElement

    Sub SetElement()
        Dim proj As Project = DTE.Solution.Projects.Item(1)
        lostClass = proj.CodeModel.CodeElements.Item("LostClass")
        MsgBox(lostClass.Name)
    End Sub

    Sub GetElement()
        MsgBox(lostClass.Name)
    End Sub
End Module

راجع أيضًا:

المبادئ

مقدمة إلى مشروع الامتداد