VS 2010鼠标处理器扩展 – 无法正常工作
我正在尝试使用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的实验实例时,我的扩展在扩展管理器中可见。 但我的自定义鼠标处理器提供商永远不会被调用。 我错过了什么/我做错了什么?
直接从这个(不是我的)网站采取:
扩展Visual Studio 2010 UML设计器 – 第1部分:入门
VSSDK Beta 2 Bug变通办法
不幸的是,目前VSSDK Beta 2中存在一些我们必须解决的问题。 我被告知他们将在更新版本中修复,但在此之前,让我带您完成完成此项工作所需的项目清理:
第1步 – 调整.csproj文件
- 右键单击您的项目,然后选择“卸载项目”。
- 再次右键单击您的项目,然后选择“编辑Yourprojectname.csproj”
- 在最顶层的属性组中,查找XML标记
。 它将被设置为false。 将其更改为true。 - 保存.csproj文件并将其重新加载到Visual Studio中。
第2步 – 调整.vsixmanifest文件
- 右键单击文件“source.extension.vsixmanifest”并选择“查看代码”
-
在名为add的下一行的文件底部。 (是的,那些垂直条很重要。)
|Yourprojectname| -
保存并关闭文件。
我花了一段时间才找到这个问题的完整解决方案,所以我将在这里发布完整的解决方案:
- 正如280Z28所建议的,Beta 2的SDK中存在一个错误。您需要手动编辑.csproj以确保您的程序集包含在生成的VSIX文件中。
- 正如JaredPar所回答的那样,应将TextViewRole属性添加到IMouseProcessorProvider实现中。
- 最后,IMouseProcessorProvider也应该使用Name属性进行修饰。
总而言之,这段代码有效:
[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)]