2009-11-22 51 views
3

我正在试验一个Visual Studio 2010扩展,我需要使用IMouseProcessor公开的事件。VS 2010鼠标处理器扩展 - 不工作

据我可以告诉从文档,我应该创建一个IMouseProcessorProvider和导出使用MEF,以便它可以由Visual Studio自动拾取。

我创建了这个类:

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

当我运行Visual Studio的实验实例中,我的分机是在扩展管理器中可见。但我的定制鼠标处理器供应商从未被调用。我错过了什么/我做错了什么?

回答

5

直接从本(不是我)的网站摘自:

Extending Visual Studio 2010 UML Designers – Part 1: Getting Started

VSSDK Beta 2中的Bug变通办法

不幸的是在当前的VSSDK Beta 2的一对夫妇的bug,我们必须解决。有人告诉我,他们将被固定在一个更新版本,但在那之前,让我带你通过,使这项工作所需的项目清理:

第1步 - 调整中的.csproj文件

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

第2步 - 调整的.vsixmanifest文件

  1. 上的文件右键单击 “source.extension.vsixmanifest”,并选择查看代码
  2. 在文件的底部部分称为添加以下行。 (是的,这些竖线是很重要的。)

    <MefComponent>|Yourprojectname|</MefComponent>

  3. 保存并关闭文件。

+0

这帮了很大忙。问题部分在于IncludeAssemblyInVSIXContainer设置为false。 – driis 2009-11-24 15:37:30

2

我相信你还需要添加一个TextViewRole属性。

[TextViewRole(PredefinedTextViewRoles.Editable)] 
+0

我也想你的建议,但具有相同的结果,很遗憾。 – driis 2009-11-22 14:39:02

3

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

  1. 作为建议的280Z28,有在SDK的Beta版中的错误2.您需要手动编辑.csproj以确保您的程序集包含在生成的VSIX文件中。
  2. 正如JaredPar回答的那样,TextViewRole attribtute应该被添加到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(); 
    } 
}