VS 2010鼠标处理器扩展 - 无法正常工作

时间:2009-11-22 14:06:59

标签: c# visual-studio-2010 mef visual-studio-2010-beta-2 vsx

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

3 个答案:

答案 0 :(得分:5)

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

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

VSSDK Beta 2 Bug变通办法

不幸的是,目前VSSDK Beta 2中存在一些我们必须解决的问题。我被告知他们将在更新版本中修复,但在此之前,让我带您完成完成此项工作所需的项目清理:

第1步 - 调整.csproj文件

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

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

      <MefComponent>|Yourprojectname|</MefComponent>

    3. 保存并关闭文件。

答案 1 :(得分:3)

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

  1. 根据280Z28的建议,Beta 2的SDK中存在一个错误。您需要手动编辑.csproj以确保您的程序集包含在生成的VSIX文件中。
  2. 正如JaredPar所回答的那样,应将TextViewRole属性添加到IMouseProcessorProvider实现中。
  3. 最后,IMouseProcessorProvider也应该使用Name属性进行修饰。
  4. 总而言之,此代码有效:

    [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)]