提供使用传统的 API 的语言服务上下文

具有语言服务的两个选项提供用户上下文使用 Visual Studio 核心编辑器:提供文本标记上下文或提供所有用户上下文。 每个之间的差异概述此处。

有关提供上下文的更多信息。连接到拥有编辑的语言服务,请参见 如何:用于编辑提供上下文

提供文本标记上下文到编辑器

为 Visual Studio 核心编辑器中的文本标记表示的编译器错误若要提供上下文,请实现 IVsTextMarkerContextProvider 接口。 在此方案中,因此,只有当光标在文本标记时,语言服务提供上下文。 这样编辑器提供了关键字在光标位置到 动态帮助 窗口中属性。

提供所有用户上下文到编辑器

如果创建语言服务和使用 Visual Studio 核心编辑器,则可以实现 IVsLanguageContextProvider 接口为语言服务提供上下文。

对于 IVsLanguageContextProvider的实现,上下文包 (集合) 附加到编辑器中,更新上下文包负责。 当 动态帮助 窗口调用此上下文包的 Update 接口在空闲时,上下文包查询更新的编辑器。 随后编辑器通知语言服务它应更新编辑器,并通过指向上下文包。 这是通过调用从编辑器中 UpdateLanguageContext 方法完成上载语言服务。 用于上下文包的指针,语言服务现在可以添加和移除属性和关键字。 有关更多信息,请参见 IVsLanguageContextProvider

有两种不同的方式实现 IVsLanguageContextProvider:

  • 提供一个关键字对上下文包

    当编辑器调用更新上下文包、通过在相应的关键字和属性然后返回 S_OK。 此返回值提示编辑器保留关键字和上下文属性而不是提供关键字在光标将上下文包。

  • 从关键字的关键字在光标

    当编辑器调用更新上下文包时,请通过在相应的属性然后返回 E_FAIL。 这在上下文包返回值提示编辑器保留属性,但是,更新包含关键字的上下文包在光标。

下图演示上下文如何为语言服务提供实现 IVsLanguageContextProvider

语言服务的上下文

LangServiceImplementation2 图

在关系图中可以看到, Visual Studio 核心文本编辑器具有一个上下文包附加到它。 此上下文包指向三个不同 subcontext 包:语言服务、默认编辑器和文本标记。 语言服务和文本标记 subcontext 包包含属性和关键字语言服务,如果 IVsLanguageContextProvider 接口实现和文本标记的,如果 IVsTextMarkerContextProvider 接口实现。 如果不实现这些接口,则编辑器为关键字提供上下文在默认编辑器 subcontext 包的光标。

编辑器和设计器的上下文准则

设计器和编辑器必须提供编辑器或设计器窗口的泛型关键字。 这样做,以便泛型,但是,相应,帮助主题为设计器或编辑器将显示,当用户按 F1 键时。 除了这,编辑器必须,,提供当前关键字在光标或提供基于当前选择的关键术语。 这是为了确保该文本或用户界面元素的帮助主题指向或选择 " 显示,当用户按 F1 键时。 设计器提供在设计器中选择项的上下文,例如在窗体上的按钮。 如 语言服务 Essentials所述,编辑器和设计器还必须连接到语言服务。