سؤال

أقوم بتجربة امتداد Visual Studio 2010 ، حيث أحتاج إلى العمل مع الأحداث المكشوفة من قبل ImouseProcessor.

بقدر ما أستطيع أن أقول من المستندات ، يجب أن أقوم بإنشاء imouseprocessorProvider و Export يستخدم MEF ، بحيث يمكن التقاطها تلقائيًا بواسطة Visual Studio.

لقد قمت بإنشاء هذا الفصل:

[Export(typeof(IMouseProcessorProvider))]
[ContentType("code")]
internal sealed class MouseProcessorFactory : IMouseProcessorProvider
{        
    public IMouseProcessor GetAssociatedProcessor(IWpfTextView wpfTextView)
    {
        return new MouseProcessor();
    }
}

عندما أقوم بتشغيل المثيل التجريبي لـ Visual Studio ، يكون امتدادي مرئيًا في مدير الإرشاد. لكن مزود معالج الماوس المخصص الخاص بي لا يتم استدعاؤه أبدًا. هل أفتقد شيئًا / ماذا أفعل خطأ؟

هل كانت مفيدة؟

المحلول

أخذ مباشرة من هذا الموقع (وليس لي):

تمديد Visual Studio 2010 UML المصممين - الجزء 1: البدء

VSSDK BETA 2 الحل البديل

لسوء الحظ ، هناك اثنين من الأخطاء في VSSDK Beta 2 التي يتعين علينا أن ندخلها. قيل لي إنه سيتم إصلاحه في إصدار تحديث ولكن حتى ذلك الحين ، اسمحوا لي أن آخذك من خلال تنظيف المشروع المطلوب لجعل هذا العمل:

الخطوة 1 - تعديل ملف .csproj

  1. انقر بزر الماوس الأيمن على مشروعك واختر "تفريغ مشروع".
  2. انقر بزر الماوس الأيمن مرة أخرى على مشروعك واختر "تحرير yourprojectname.csproj"
  3. في مجموعة العقارات الأعلى ، ابحث عن علامة XML <IncludeAssemblyInVSIXContainer>. سيتم ضبطه على خطأ. تغييره إلى صحيح.
  4. احفظ ملف .csproj وإعادة تحميله في Visual Studio.

الخطوة 2 - تعديل ملف .vsixmanifest

  1. انقر بزر الماوس الأيمن على الملف "source.extension.vsixManifest" واختر عرض رمز
  2. في أسفل الملف في القسم المسمى إضافة السطر التالي. (نعم ، تلك القضبان الرأسية مهمة.)

    <MefComponent>|Yourprojectname|</MefComponent>

  3. أحفظ وأغلق الملف.

نصائح أخرى

استغرق الأمر مني بعض الوقت للعثور على الحل الكامل لهذه المشكلة ، لذلك سأقوم بنشر الحل الكامل هنا:

  1. كما اقترح 280Z28 ، هناك خطأ في SDK لـ Beta 2. تحتاج إلى تحرير .csproj يدويًا للتأكد من تضمين التجميع الخاص بك في ملف VSIX الذي تم إنشاؤه.
  2. كما أجاب Jaredpar ، يجب إضافة TextViewRole attribtute إلى تطبيق ImouseProcessorProvider.
  3. أخيرًا ، يجب أيضًا تزيين ImouseProcessorProvider بسمات الاسم.

الكل في الكل ، يعمل هذا الرمز:

[Export(typeof(IMouseProcessorProvider))]
[ContentType("code")]
[TextViewRole(PredefinedTextViewRoles.Editable)]
[Name("mouseproc")]
internal sealed class MouseProcessorFactory : IMouseProcessorProvider
{        
    public IMouseProcessor GetAssociatedProcessor(IWpfTextView wpfTextView)
    {            
        return new MouseProcessor();
    }
}

أعتقد أنك بحاجة إلى إضافة أ TextViewRole السمة كذلك.

[TextViewRole(PredefinedTextViewRoles.Editable)]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top