源代码管理配置详细信息

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

  • 请求允许转换到更改后的状态

  • 请求保存文件的权限

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

请求获得权限以切换到已更改的状态

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

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

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

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

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

请求保存文件的权限

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

注释

始终预先进行这些调用,即在编辑器能够接收取消时。

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

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

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

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