我是扩展编写VS扩展的新手,并找到关于这个主题的信息,比如解开3个纱球。我已经在MSDN网站上阅读了很多内容,以及很多谷歌搜索失败。
我的目标是编写一个Visual Studio扩展(使用MEF和MPF)来改进对第三方创建的语言的支持。第三方已经有一个VS扩展,它支持调试以及最小的Intellisense,并提供着色。我不想失去他们的调试支持,但我确实希望改善体验的其他方面。
根据我的理解,给定的语言(内容类型)只能由一个LanguageService和/或一组编辑服务通过MEF(着色,智能感知等)支持。它是否正确?是否可以替换现有的Intellisense,并添加其他功能?
答案 0 :(得分:0)
是的,通过一些努力,您可以绕过其语言服务的注册并注册您自己的相同文件扩展名。语言服务几乎独立于调试引擎(我说几乎是因为设计时断点放置等几个小东西通过一些语言服务对象,但它并不是很重要)。
我建议完全取代他们的语言服务,这比试图在不破坏它们的情况下增加他们的语言服务要简单得多,尤其是在没有访问他们的来源进行更改的情况下。
大多数注册都是通过注册表中的条目绑定的,例如:在HKCU\Software\Microsoft\VisualStudio\14.0_Config\
。这是MEF组件的不 true,但MEF组件往往按内容类型进行过滤,内容类型由语言服务定义,因此只要您在自己的内容类型中定义不同的内容类型,就应该没问题。语言服务并将你的东西绑定到那个。
您可以为相同的文件扩展名注册语言服务,但具有更高的优先级(通过语言服务包上的ProvideEditorExtension
属性)。然后,这完全取决于您的语言服务,并且您不必担心他们会阻碍他们(只要它的行为与不属于自己的内容类型相同)。
最后,祝你好运!从头开始编写(好)语言服务可能需要很长时间: - )