单一语言的重复 Visual Studio 扩展

Duplicate Visual Studio Extension For Single Language

我是 Extension 的新手,编写 VS 扩展,并查找有关该主题的信息,例如解开 3 个毛线球。我在 MSDN 网站上阅读了很多内容,也做了很多失败的 google 搜索。

我的目标是编写 Visual Studio 扩展(使用 MEF 和 MPF)来改进对由第 3 方创建的语言的支持。第 3 方已经有一个 VS 扩展,它支持调试以及最小的 Intellisense,并提供着色。我不想失去他们的调试支持,但我确实想改进体验的各个方面。

据我了解,一种给定的语言(内容类型)只能由一个 LanguageService and/or 组编辑器服务通过 MEF(着色、智能感知等)支持。这个对吗?是否可以替换他们现有的 Intellisense,并添加其他功能?

是的,稍加努力,您就可以绕过他们的语言服务注册,并为相同的文件扩展名注册您自己的语言服务。语言服务几乎独立于调试引擎(我说几乎是因为设计时断点放置等一些小事情会通过一些语言服务对象,但这不是很重要)。

我建议用您的语言服务完全取代他们的语言服务,这比尝试在不破坏它的情况下扩充他们的语言服务要简单得多,尤其是在无法访问他们的源代码以进行更改的情况下。

大多数注册都是通过注册表中的条目绑定的,例如在 HKCU\Software\Microsoft\VisualStudio.0_Config\。对于 MEF 组件,不是,但是 MEF 组件倾向于按内容类型过滤,这是由语言服务定义的,因此只要定义不同的内容就可以了输入您的语言服务并将您的内容绑定到该服务。

您可以为相同的文件扩展名注册您的语言服务,但具有更高的优先级(通过语言服务包上的 ProvideEditorExtension 属性)。然后这一切都取决于您的语言服务,您不必担心他们的语言服务会妨碍(只要它的行为不是它自己的内容类型,它应该这样做)。

最后,祝你好运!从头开始编写(好的)语言服务可能是一段漫长的旅程:-)