我正在尝试使用Visual Studio 2010扩展,我需要处理IMouseProcessor公开的事件。
据我所知,我应该创建一个IMouseProcessorProvider并导出使用MEF,以便Visual Studio可以自动获取它。
我创建了这个类:
[Export(typeof(IMouseProcessorProvider))]
[ContentType("code")]
internal sealed class MouseProcessorFactory : IMouseProcessorProvider
{
public IMouseProcessor GetAssociatedProcessor(IWpfTextView wpfTextView)
{
return new MouseProcessor();
}
}
当我运行Visual Studio的实验性实例时,我的扩展程序在扩展管理器中可见。但我的自定义鼠标处理器提供商从未被调用过。我错过了什么/我做错了什么?
答案 0 :(得分:5)
Extending Visual Studio 2010 UML Designers – Part 1: Getting Started
不幸的是,目前VSSDK Beta 2中存在一些我们必须解决的问题。我被告知他们将在更新版本中修复,但在此之前,让我带您完成完成此项工作所需的项目清理:
第1步 - 调整.csproj文件
<IncludeAssemblyInVSIXContainer>
。它将被设置为false。将其更改为true。第2步 - 调整.vsixmanifest文件
在名为添加以下行的部分中的文件底部。 (是的,那些垂直条很重要。)
<MefComponent>|Yourprojectname|</MefComponent>
保存并关闭文件。
答案 1 :(得分:3)
我花了一些时间才找到这个问题的完整解决方案,所以我将在这里发布完整的解决方案:
总而言之,此代码有效:
[Export(typeof(IMouseProcessorProvider))]
[ContentType("code")]
[TextViewRole(PredefinedTextViewRoles.Editable)]
[Name("mouseproc")]
internal sealed class MouseProcessorFactory : IMouseProcessorProvider
{
public IMouseProcessor GetAssociatedProcessor(IWpfTextView wpfTextView)
{
return new MouseProcessor();
}
}
答案 2 :(得分:2)
我相信您还需要添加TextViewRole
属性。
[TextViewRole(PredefinedTextViewRoles.Editable)]