5

我正在尝试使用 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 的实验实例时,我的扩展在扩展管理器中可见。但是我的自定义鼠标处理器提供程序永远不会被调用。我错过了什么/我做错了什么?

4

3 回答 3

5

直接取自这个(不是我的)网站:

扩展 Visual Studio 2010 UML 设计器 - 第 1 部分:入门

VSSDK Beta 2 Bug 变通办法

不幸的是,我们必须解决当前的 VSSDK Beta 2 中的一些错误。我被告知它们将在更新版本中得到修复,但在那之前,让我带您完成完成这项工作所需的项目清理:

第 1 步 – 调整 .csproj 文件

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

第 2 步 – 调整 .vsixmanifest 文件

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

    <MefComponent>|Yourprojectname|</MefComponent>

  3. 保存并关闭文件。

于 2009-11-24T00:41:12.960 回答
3

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

  1. 正如 280Z28 所建议的,SDK for Beta 2 中存在一个错误。您需要手动编辑 .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();
    }
}
于 2009-11-24T15:47:47.517 回答
2

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

[TextViewRole(PredefinedTextViewRoles.Editable)]
于 2009-11-22T14:28:28.917 回答