源代码管理配置详细信息

若要实现源代码管理,需要正确配置项目系统或编辑器以执行以下操作:

  • 请求转换到已更改状态的权限

  • 请求保存文件的权限

  • 请求在项目中添加、删除或重命名文件的权限

请求转换到已更改状态的权限

项目或编辑器必须通过调用IVsQueryEditQuerySave2请求转换到已更改状态(脏)状态的权限。 实现IsDocDataDirty的每个编辑器都必须调用QueryEditFiles并接收批准,才能在返回TrueIsDocDataDirty之前从环境中更改文档。 项目实质上是项目文件的编辑器,因此,将项目文件的更改状态跟踪实现为项目文件负责,因为文本编辑器对其文件执行更改状态跟踪。 环境处理解决方案的更改状态,但必须处理解决方案引用但不存储的任何对象的更改状态,例如项目文件或其项。 通常,如果项目或编辑器负责管理项的持久性,则它负责实现更改状态跟踪。

为了响应 IVsQueryEditQuerySave2::QueryEditFiles 调用,环境可以执行以下操作:

  • 拒绝更改调用,在这种情况下,编辑器或项目必须保持不变(干净)状态。

  • 指示应重新加载文档数据。 对于项目,环境将重新加载项目的数据。 编辑器必须通过其 ReloadDocData 实现从磁盘重新加载数据。 在任一情况下,项目或编辑器中的上下文都可以在重新加载数据时更改。

    对现有代码库进行适当 IVsQueryEditQuerySave2::QueryEditFiles 调用进行改造是一项复杂而困难的任务。 因此,应在创建项目或编辑器期间集成这些调用。

请求保存文件的权限

在项目或编辑器保存文件之前,它必须调用 QuerySaveFileQuerySaveFiles。 对于项目文件,解决方案会自动完成这些调用,该解决方案知道何时保存项目文件。 除非编辑器实现 IVsPersistDocData2 使用帮助程序函数 SaveDocDataToFile,否则编辑器负责进行这些调用。 如果编辑器以这种方式实现 IVsPersistDocData2 ,则调用 IVsQueryEditQuerySave2::QuerySaveFileIVsQueryEditQuerySave2::QuerySaveFiles 已为你发出。

注意

始终先发制人地进行这些调用,即当编辑器能够收到取消时。

请求在项目中添加、删除或重命名文件的权限

在项目可以添加、重命名或删除文件或目录之前,它必须调用适当的 IVsTrackProjectDocuments2::OnQuery* 方法来请求来自环境的权限。 如果授予了权限,则项目必须完成该操作,然后调用相应的 IVsTrackProjectDocuments2::OnAfter* 方法来通知环境操作已完成。 项目必须为所有文件(例如特殊文件)调用接口的方法 IVsTrackProjectDocuments2 ,而不仅仅是父文件。 文件调用是必需的,但目录调用是可选的。 如果项目包含目录信息,则应调用适当的 IVsTrackProjectDocuments2 方法,但如果项目没有此信息,环境将推断目录信息。

项目不应调用在项目打开或关闭时的方法 IVsTrackProjectDocuments2 。 启动时希望此信息的 OnAfterOpenSolution 侦听器可以等待事件,并循环访问解决方案以查找所需的信息。 关闭时,不需要此信息。 IVsTrackProjectDocuments2 是从 . SVsTrackProjectDocuments.

对于每个添加、重命名和删除操作,都有一个 OnQuery* 方法和一种方法 OnAfter*OnQuery*调用该方法以请求权限添加、重命名或删除文件或目录。 OnAfter*在添加、重命名或删除文件或目录后调用该方法,项目状态反映新状态。