查询编辑查询保存(源代码管理 VSPackage)

Visual Studio 编辑器可以广播查询编辑查询保存(QEQS)事件。 Visual Studio 源代码管理存根实现 QEQS 服务,以便它是 QEQS 事件的接收方。 然后将这些事件委托给当前活动的源代码管理 VSPackage。 活动源代码管理 VSPackage 实现 IVsQueryEditQuerySave2 及其方法。 接口的方法 IVsQueryEditQuerySave2 通常在第一次编辑文档之前立即调用,并在保存文档之前立即调用。

QueryEditQuerySave 事件

源代码管理 VSPackage 必须通过实现 IVsQueryEditQuerySave2 接口和必要的方法来处理 QEQS 事件。 下面是 VSPackage 必须至少实现的两种方法的简要说明。 实际实现必须符合源代码管理模型的逻辑。

QueryEditFiles 方法

QueryEditFiles当任何项目或编辑器想要修改文件时,将调用该文件。 理想情况下,在修改文件之前以及保存文件时调用此方法。 调用时,该方法IVsQueryEditQuerySave2::QueryEditFiles检查给定文件是否在源代码管理下、是否需要检查,以及是否可以重新加载它们。 如果情况阻止文件可编辑,该方法 IVsQueryEditQuerySave2::QueryEditFiles 会告知调用程序取消编辑。 调用方还可以指定调用模式。 在“无提示”模式下,仅当此方法不会导致任何 UI 出现时,此方法才会执行操作。 如果 UI 不可避免,则必须返回一个标志来指示问题。

该方法的行为方式为事务性;也就是说,如果对单个文件取消了编辑,则会取消所有文件的编辑。 相反,如果允许编辑,则允许编辑所有文件。 如果此方法允许对给定的文件集进行一次编辑,则它必须始终允许对同一组文件的后续调用进行编辑。 允许编辑循环将继续,直到文件关闭、保存和重新加载;直到其属性(属性)发生更改;或在源代码管理包更改之前。 在实现 IVsQueryEditQuerySave2::QueryEditFiles 该方法时要考虑的案例包括多个文件、特殊文件、从用户取消和内存中编辑。

QuerySaveFiles 方法

QuerySaveFiles当任何项目或编辑器需要保存一组文件时,将调用它。 调用时,IVsQueryEditQuerySave2::QuerySaveFiles该方法检查给定文件是只读的,以及它们是否在源代码管理下。 如果需要将文件检查出来,则调用将委托给源代码管理包。 如果情况阻止保存文件,该方法 IVsQueryEditQuerySave2::QuerySaveFiles 必须告知编辑器取消保存。 与 IVsQueryEditQuerySave2::QueryEditFiles 该方法一样,调用方可以指定调用模式。 在“无提示”模式下,仅当此方法不会导致任何 UI 出现时,此方法才会执行操作。 如果 UI 不可避免,则必须返回一个标志来指示问题。

此方法必须以事务方式行为;也就是说,如果在单个文件上取消保存,则会为所有文件取消保存。 相反,如果允许保存,则必须允许保存所有文件。 与该方法 IVsQueryEditQuerySave2::QueryEditFiles 一样,在实现 IVsQueryEditQuerySave2::QuerySaveFiles 该方法时要考虑的案例包括多个文件、特殊文件、从用户取消和内存中编辑。