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文件

  1. 右键单击您的项目,然后选择“卸载项目”。
  2. 再次右键单击您的项目,然后选择“编辑Yourprojectname.csproj”
  3. 在最顶层的属性组中,查找XML标记 。 它将被设置为false。 将其更改为true。
  4. 保存.csproj文件并将其重新加载到Visual Studio中。

第2步 – 调整.vsixmanifest文件

  1. 右键单击文件“source.extension.vsixmanifest”并选择“查看代码”
  2. 在名为add的下一行的文件底部。 (是的,那些垂直条很重要​​。)

    |Yourprojectname|

  3. 保存并关闭文件。

我花了一段时间才找到这个问题的完整解决方案,所以我将在这里发布完整的解决方案:

  1. 正如280Z28所建议的,Beta 2的SDK中存在一个错误。您需要手动编辑.csproj以确保您的程序集包含在生成的VSIX文件中。
  2. 正如JaredPar所回答的那样,应将TextViewRole属性添加到IMouseProcessorProvider实现中。
  3. 最后,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)]