1

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

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

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

4

1 回答 1

0

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

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

大多数注册都是通过注册表中的条目绑定的,例如 at HKCU\Software\Microsoft\VisualStudio\14.0_Config\。MEF 组件并非如此,但 MEF 组件倾向于按内容类型进行过滤,内容类型由语言服务定义,因此只要您在语言服务中定义不同的内容类型并将您的内容绑定到那。

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

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

于 2016-07-28T20:59:42.617 回答