VS 2010 امتداد معالج الماوس - لا يعمل
-
21-09-2019 - |
سؤال
أقوم بتجربة امتداد 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
- انقر بزر الماوس الأيمن على مشروعك واختر "تفريغ مشروع".
- انقر بزر الماوس الأيمن مرة أخرى على مشروعك واختر "تحرير yourprojectname.csproj"
- في مجموعة العقارات الأعلى ، ابحث عن علامة XML
<IncludeAssemblyInVSIXContainer>
. سيتم ضبطه على خطأ. تغييره إلى صحيح. - احفظ ملف .csproj وإعادة تحميله في Visual Studio.
الخطوة 2 - تعديل ملف .vsixmanifest
- انقر بزر الماوس الأيمن على الملف "source.extension.vsixManifest" واختر عرض رمز
في أسفل الملف في القسم المسمى إضافة السطر التالي. (نعم ، تلك القضبان الرأسية مهمة.)
<MefComponent>|Yourprojectname|</MefComponent>
أحفظ وأغلق الملف.
نصائح أخرى
استغرق الأمر مني بعض الوقت للعثور على الحل الكامل لهذه المشكلة ، لذلك سأقوم بنشر الحل الكامل هنا:
- كما اقترح 280Z28 ، هناك خطأ في SDK لـ Beta 2. تحتاج إلى تحرير .csproj يدويًا للتأكد من تضمين التجميع الخاص بك في ملف VSIX الذي تم إنشاؤه.
- كما أجاب Jaredpar ، يجب إضافة TextViewRole attribtute إلى تطبيق ImouseProcessorProvider.
- أخيرًا ، يجب أيضًا تزيين 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)]