安装源代码管理插件
创建源代码管理插件涉及三个步骤:
使用本文档的源代码管理插件 API 参考部分中定义的函数创建 DLL。
实现源代码管理插件 API 定义的函数。 当 Visual Studio 调用它时,请通过插件提供接口和对话框。
通过进行相应的注册表项注册 DLL。
与 Visual Studio 的集成
Visual Studio 支持符合源代码管理插件 API 的源代码管理插件。
注册源代码管理插件
在正在运行的集成开发环境(IDE)可以调用源代码管理系统之前,必须先找到导出 API 的源代码管理插件 DLL。
注册源代码管理插件 DLL
在 SOFTWARE 子项的 HKEY_LOCAL_MACHINE 键下添加两个条目,指定公司名称子项后跟产品名称子项。 模式为 HKEY_LOCAL_MACHINE\SOFTWARE\<company name\product name>>\<<entry = >value。 这两个条目始终称为 SCCServerName 和 SCCServerPath。 每个字符串都是常规字符串。
例如,如果公司名称为 Microsoft,并且源代码管理产品名为 Source保险箱,则此注册表路径将为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Source保险箱。 在此子项中,第一个条目 SCCServerName 是一个用户可读字符串,用于命名产品。 第二个条目 SCCServerPath 是 IDE 应连接到的源代码管理插件 DLL 的完整路径。 下面提供了示例注册表项:
示例注册表项 示例值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Source保险箱\SCCServerName Microsoft Visual SourceSafe HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Source保险箱\SCCServerPath c:\vss\win32\ssscc.dll 注意
SCCServerPath 是源插件的完整路径保险箱。 源代码管理插件将使用不同的公司和产品名称,但使用相同的注册表项路径。
以下可选注册表项可用于修改源代码管理插件的行为。 这些条目与 SccServerName 和 SccServerPath 位于同一子项中。
如果不希望源代码管理插件显示在 Visual Studio 的插件选择列表中,则可以使用 HideInVisualStudioregistry 条目。 此条目还会影响自动切换到源代码管理插件。 此条目的一个可能用途是,如果你提供一个源代码管理包来替换源代码管理插件,但你希望让用户更轻松地从使用源代码管理插件迁移到源代码管理包。 安装源代码管理包后,它会设置此注册表项,这会隐藏插件。
HideInVisualStudio 是 DWORD 值,设置为 1 可隐藏插件或 0 以显示插件。 如果未显示注册表项,则默认行为是显示插件。
DisableSccManager 注册表项可用于禁用或隐藏通常显示在“文件>源代码管理”子菜单下的“启动<源代码管理服务器>”菜单选项。 选择此菜单选项将调用 SccRunScc 函数。 源代码管理插件可能不支持外部程序,因此你可能希望禁用甚至隐藏 “启动 ”菜单选项。
DisableSccManager 是 DWORD 值,设置为 0 以启用 “启动 <源代码管理服务器> ”菜单选项,设置为 1 以禁用菜单选项,设置为 2 以隐藏菜单选项。 如果未显示此注册表项,则默认行为是显示菜单选项。
示例注册表项 示例值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Source保险箱\HideInVisualStudio 1 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Source保险箱\DisableSccManager 1 在 SOFTWARE 子项中的HKEY_LOCAL_MACHINE键下添加子项 SourceCodeControlProvider。
在此子项下,注册表项 ProviderRegKey 设置为一个字符串,表示在步骤 1 中放置在注册表中的子项。 模式为 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\ProviderRegKey = SOFTWARE\<company name\<product name。>>
下面是此子项的示例内容。
注册表项 示例值 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\ProviderRegKey SOFTWARE\Microsoft\Source保险箱 注意
源代码管理插件将使用相同的子项和条目名称,但该值会有所不同。
在 SourceCodeControlProvider 子项下创建名为 InstalledSCCProviders 的子项,然后在该子项下放置一个条目。
此条目的名称是提供程序的用户可读名称(与为 SCCServerName 条目指定的值相同),该值再次是步骤 1 中创建的子项。 模式为 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\InstalledSCCProviders\<display name SOFTWARE\<company name>\<product name> = >。
例如:
示例注册表项 示例值 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\InstalledSCCProviders\Microsoft Visual Source保险箱 SOFTWARE\Microsoft\Source保险箱 注意
可以通过这种方式注册多个源代码管理插件。 这是 Visual Studio 查找所有已安装的源代码管理插件基于 API 的插件的方式。
IDE 如何查找 DLL
Visual Studio IDE 有两种方法来查找源代码管理插件 DLL:
查找默认源代码管理插件并无提示地连接到它。
查找用户从中选择一个插件的所有已注册源代码管理插件。
若要以第一种方式查找 DLL,IDE 会在条目 ProviderRegKey 的 HKEY_LOCAL_MACHINE\Software\SourceCodeControlProvider 子项下查找。 此入口点的值指向另一个子项。 然后,IDE 会在HKEY_LOCAL_MACHINE下的第二个子项中查找名为 SccServerPath 的条目。 此入口的值将 IDE 指向 DLL。
注意
IDE 不会从相对路径(例如 .\NewProvider.DLL)加载 DLL。 必须指定 DLL 的完整路径(例如 c:\Providers\NewProvider.DLL)。 这通过防止加载未经授权的或模拟的插件 DLL 来增强 IDE 的安全性。
若要以第二种方式查找 DLL,IDE 会在所有条目的 HKEY_LOCAL_MACHINE\Software\SourceCodeControlProvider\InstalledSCCProviders 子项下查找。 每个条目都有一个名称和一个值。 IDE 向用户显示这些名称的列表。 当用户选择名称时,IDE 将查找指向子项的选定名称的值。 IDE 会在HKEY_LOCAL_MACHINE下的子项中查找名为 SccServerPath 的条目。 该入口的值将 IDE 指向正确的 DLL。
源代码管理插件需要支持查找 DLL 的两种方式,因此,设置 ProviderRegKey,覆盖任何以前的设置。 更重要的是,它必须将自身添加到 InstalledSccProviders 列表,以便用户可以选择要使用的源代码管理插件。
注意
由于使用了HKEY_LOCAL_MACHINE密钥,因此只能在给定计算机上将一个源代码管理插件注册为默认源代码管理插件(但是,Visual Studio 允许用户确定要实际用于特定解决方案的源代码管理插件)。 在安装过程中,检查查看是否已设置源代码管理插件;如果是,请询问用户是否将正在安装的新源代码管理插件设置为默认值。 在卸载期间,请勿删除HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider 中所有源代码管理插件通用的其他注册表子项;仅删除特定的 SCC 子项。
IDE 如何检测版本 1.2/1.3 支持
Visual Studio 如何检测插件是否支持源代码管理插件 API 版本 1.2 和 1.3 功能? 若要声明高级功能,源代码管理插件必须实现相应的函数:
首先,Visual Studio 检查调用 SccGetVersion 返回的值。 它必须大于或等于 1.2。
接下来,Visual Studio 通过检查 lpSccCaps
SccInitialize 上的参数来确定是否支持特定新功能。
如果满足这两个条件,则可以调用版本 1.2 和 1.3 中支持的新函数。