支持符号浏览工具
对象浏览器、 类视图、 调用浏览器 和 查找符号结果 工具在 Visual Studio 中提供符号浏览功能。 这些工具显示符号的分层树视图,并显示树中的符号之间的关系。 这些符号可以表示各种组件中包含的命名空间、对象、类、类成员和其他语言元素。 这些组件包括 Visual Studio 项目、外部 .NET Framework 组件和类型 (.tlb) 库。 有关详细信息,请参阅查看代码的结构。
符号浏览库
作为语言实现者,可以通过创建库来扩展 Visual Studio 符号浏览功能,这些库跟踪组件中的符号,并通过一组接口向 Visual Studio 对象管理器提供符号列表。 接口描述了 IVsSimpleLibrary2 库。 Visual Studio 对象管理器通过从库获取数据并组织新数据来响应对符号浏览工具中新数据的请求。 随后,它会使用请求的数据填充或更新工具。 若要获取对 Visual Studio 对象管理器的引用, IVsObjectManager2请将 SVsObjectManager 服务 ID 传递给 GetService
方法。
每个库都必须注册到 Visual Studio 对象管理器,该管理器收集有关所有库的信息。 若要注册库,请调用该方法 RegisterSimpleLibrary 。 根据哪个工具启动请求,Visual Studio 对象管理器查找相应的库和请求数据。 数据在库和 Visual Studio 对象管理器之间传输,这些符号列表由 IVsSimpleObjectList2 接口描述。
Visual Studio 对象管理器负责定期刷新符号浏览工具,以反映库中包含的最新数据。
下图包含库和 Visual Studio 对象管理器之间请求/数据交换过程的关键元素示例。 关系图中的接口是托管代码应用程序的一部分。
若要向 Visual Studio 对象管理器提供符号列表,必须先通过调用 RegisterSimpleLibrary 该方法向 Visual Studio 对象管理器注册库。 注册库后,Visual Studio 对象管理器会请求有关库功能的某些信息。 例如,它通过调用 GetLibFlags2 和 GetSupportedCategoryFields2 方法请求库标志和支持的类别。 在某些时候,当其中一个工具从此库请求数据时,对象管理器通过调用 GetList2 该方法请求符号的顶级列表。 作为响应,库会生成符号列表,并通过接口将其公开 IVsSimpleObjectList2 给 Visual Studio 对象管理器。 Visual Studio 对象管理器通过调用 GetItemCount 该方法来确定列表中的项数。 以下所有请求都与列表中的给定项相关,并在每个请求中提供项索引号。 Visual Studio 对象管理器通过调用 GetCategoryField2 方法收集有关项的类型、辅助功能和其他属性的信息。
它通过调用 GetTextWithOwnership 该方法来确定项的名称,并通过调用 GetDisplayData 该方法请求图标信息。 图标显示在项名称的左侧,并描述项的类型、辅助功能和其他属性。
Visual Studio 对象管理器调用 GetExpandable3 该方法来确定给定列表项是否可展开并具有子项。 如果 UI 发送扩展元素的请求,则对象管理器通过调用 GetList2 方法请求符号的子列表。 该过程继续,树的不同部分是按需构建的。
注意
若要实现本机代码符号提供程序,请使用 IVsLibrary2 和 IVsObjectList2 接口。