源代码管理 VSPackage 体系结构

源代码管理包是一个 VSPackage,它使用 Visual Studio IDE 提供的服务。 作为回报,源代码管理包将其功能作为源代码管理服务提供。 此外,源代码管理包是一种比源代码管理插件更通用的替代方法,用于将源代码管理集成到 Visual Studio 中。

实现源代码管理插件 API 的源代码管理插件遵守严格的协定。 例如,插件不能替换默认的 Visual Studio 用户界面(UI)。 此外,源代码管理插件 API 不允许插件实现自己的源代码管理模型。 但是,源代码管理包克服了这两个限制。 源代码管理包完全控制 Visual Studio 用户的源代码管理体验。 此外,源代码管理包可以使用自己的源代码管理模型和逻辑,并且可以定义所有与源代码管理相关的用户界面。

源代码管理包组件

如体系结构图中所示,名为“源代码管理存根”的 Visual Studio 组件是将源代码管理包与 Visual Studio 集成的 VSPackage。

源代码管理存根处理以下任务。

  • 提供源代码管理包注册所需的常见 UI。

  • 加载源代码管理包。

  • 将源代码管理包设置为活动/非活动包。

    源代码管理存根查找源代码管理包的活动服务,并将 IDE 中的所有传入服务调用路由到该包。

    源代码管理适配器包是 Visual Studio 提供的特殊源代码管理包。 此包是支持基于源代码管理插件 API 的源代码管理插件的中心组件。 当源代码管理插件是活动插件时,源代码管理存根会将其事件发送到源代码管理适配器包。 反过来,源代码管理适配器包使用源代码管理插件 API 与源代码管理插件通信,并提供所有源代码管理插件通用的默认 UI。

    另一方面,当源代码管理包是活动包时,源代码管理存根会使用 Visual Studio SDK 源代码管理包接口直接与包通信。 源代码管理包负责托管自己的源代码管理 UI。

    Source Control Architecture graphic

    对于源代码管理包,Visual Studio 不提供源代码或 API 进行集成。 这与创建源代码管理插件中 概述的方法形成鲜明对比,其中源代码管理插件 必须实现一组严格的函数和回调。

    与任何 VSPackage 一样,源代码管理包是一个 COM 对象,可以使用它创建 CoCreateInstance。 VSPackage 通过实现 IVsPackage使自己可供 Visual Studio IDE 使用。 创建实例后,VSPackage 会收到站点指针和 IServiceProvider 接口,该接口提供对 IDE 中可用服务和接口的 VSPackage 访问权限。

    编写基于 VSPackage 的源代码管理包需要比编写基于源代码管理插件的插件更高级的编程专业知识。