【问题标题】:VS 2010 mouse processor extension - not workingVS 2010 鼠标处理器扩展 - 不工作
【发布时间】:2009-11-22 14:06:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    VSSDK Beta 2 错误解决方法

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

    第 1 步 - 调整 .csproj 文件

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

    第 2 步 - 调整 .vsixmanifest 文件

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

      <MefComponent>|Yourprojectname|</MefComponent>

    3. 保存并关闭文件。

    【讨论】:

    • 这很有帮助;问题的部分原因在于 IncludeAssemblyInVSIXContainer 被设置为 false。
    【解决方案2】:

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

    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();
        }
    }
    

    【讨论】:

      【解决方案3】:

      我认为您还需要添加 TextViewRole 属性。

      [TextViewRole(PredefinedTextViewRoles.Editable)]
      

      【讨论】:

      • 我已经尝试过你的建议,但不幸的是,结果相同。
      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2022-08-23
      • 2014-04-17
      • 2013-03-18
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多