Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS 2010鼠标处理器扩展-不工作_C#_Mef_Visual Studio 2010_Vsx - Fatal编程技术网

C# VS 2010鼠标处理器扩展-不工作

C# VS 2010鼠标处理器扩展-不工作,c#,mef,visual-studio-2010,vsx,C#,Mef,Visual Studio 2010,Vsx,我正在试验VisualStudio2010扩展,在这里我需要处理IMouseProcessor公开的事件 从文档中可以看出,我应该创建一个IMouseProcessorProvider,并使用MEF导出,以便VisualStudio能够自动获取它 我创建了这个类: [Export(typeof(IMouseProcessorProvider))] [ContentType("code")] internal sealed class MouseProcessorFactory : IMouseP

我正在试验VisualStudio2010扩展,在这里我需要处理IMouseProcessor公开的事件

从文档中可以看出,我应该创建一个IMouseProcessorProvider,并使用MEF导出,以便VisualStudio能够自动获取它

我创建了这个类:

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

当我运行VisualStudio的实验实例时,我的扩展在扩展管理器中可见。但我的自定义鼠标处理器提供程序从未被调用。我遗漏了什么/我做错了什么

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

[TextViewRole(PredefinedTextViewRoles.Editable)]
直接从该(非矿山)现场获取:

VSSDK Beta 2错误解决方法 不幸的是,当前的VSSDK Beta 2中有几个bug需要我们解决。我被告知它们将在更新版本中修复,但在此之前,让我带您完成使其正常工作所需的项目清理:

步骤1–调整.csproj文件

  • 右键单击项目并选择“卸载项目”
  • 再次右键单击您的项目并选择“编辑您的ProjectName.csproj”
  • 在最上面的属性组中,查找XML标记
    。它将被设置为false。将其更改为true
  • 保存.csproj文件并将其重新加载到Visual Studio中 步骤2–调整.vsixmanifest文件

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

    |您的项目名称|

  • 保存并关闭文件


  • 我花了一段时间才找到这个问题的完整解决方案,因此我将在此处发布完整的解决方案:

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

    我试过你的建议,但不幸的是,结果是一样的;部分原因是IncludeAssemblyInVSIXContainer设置为false。