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

适用范围:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

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 方法时要考虑的情况包括多个文件、特殊文件、从用户取消和内存中编辑。

另请参阅