IVsHierarchyRefactorNotify 接口

定义

通知重构操作的层次结构。

public interface class IVsHierarchyRefactorNotify
public interface class IVsHierarchyRefactorNotify
__interface IVsHierarchyRefactorNotify
[System.Runtime.InteropServices.Guid("FE5FEE31-C302-4961-876F-F3C8F853E4F8")]
[System.Runtime.InteropServices.InterfaceType(1)]
public interface IVsHierarchyRefactorNotify
[<System.Runtime.InteropServices.Guid("FE5FEE31-C302-4961-876F-F3C8F853E4F8")>]
[<System.Runtime.InteropServices.InterfaceType(1)>]
type IVsHierarchyRefactorNotify = interface
Public Interface IVsHierarchyRefactorNotify
属性

注解

若要支持重构操作,项目系统必须实现 IVsHierarchy ,它表示层次结构、 IVsProjectIVsHierarchyRefactorNotify 接口。 还必须实现语言服务,以支持与代码编辑相关的功能,包括重构操作。 有关语言服务的详细信息,请参阅 旧版语言服务接口

通过实现 IVsHierarchyRefactorNotify ,你可以为你的语言服务提供通知 IVsHierarchy 接口有关重构操作的功能,如符号重命名或参数重新排序。 如果层次结构使用生成提供程序、单个文件生成器或一些其他服务生成代码,则必须获取对实现接口的对象的引用 IVsRefactorNotify

每个项目系统和语言服务定义获取对对象的引用的特定方式 IVsRefactorNotify 。 例如, Visual Basic 、 Visual C# 或 Visual J# 桌面项目系统通过对实现的对象调用来获取对实现的对象的引用 IVsRefactorNotify IUnknown::QueryInterface IVsSingleFileGenerator 。 Visual Basic、 Visual C# 或 Visual J# Web 项目系统 QueryService 通过使用在 Guid HKLM\Software\Microsoft\VisualStudio\8.0\Projects \ { \FileExtensions \ {file extension} \RefactorNotify 注册表项下注册的来调用。 该层次结构将通知传递给 IVsRefactorNotify 对象,以将重构操作合并到设计器文件中或停止操作,并通过 IErrorInfo 返回一条错误消息。 设计器文件可以是提供的任何输入文件 Visual Studio ,例如 .resx、.xsd、. settings、.map 文件或与代码生成器或生成提供程序关联的任何其他文件扩展名。

若要成功完成完整重构操作,层次结构必须签出传递到的文件 IVsHierarchyRefactorNotify 以及从相应方法调用返回的文件 IVsRefactorNotify

重构操作失败时,层次结构必须在消息框中显示错误消息。

操作流

  1. 用户调用符号重命名或任何其他重构操作。

  2. Visual Studio语言服务确定操作影响的代码文件。

  3. 语言服务调用 IVsHierarchyRefactorNotify.OnBefore 方法,通知层次结构哪些文件受此操作影响。

  4. 层次结构确定是否从设计器文件生成任何受影响的文件。

  5. 如果生成了文件,则层次结构将获取对实现的对象的引用, IVsRefactorNotify 并将 IVsRefactorNotify.OnBefore 通知发送到 IVsRefactorNotify 每个生成的文件的实施者。

  6. IVsRefactorNotify实施者可以通过返回失败并通过调用方法来设置错误来停止操作 M:Microsoft.VisualStudio.Shell.Interop.IVsUIShell.SetErrorInfo(System.Int32,System.String,System.UInt32,System.String,System.String) 。 如果实现者不 IVsRefactorNotify 想停止此操作,它将确定操作影响的设计器文件,并 IVsHierarchyRefactorNotify 在 out 数组中将文件集返回到 VSITEMID

    备注

    IVsRefactorNotify此时,实施者不得更新设计器文件。 在第二次调用 IVsRefactorNotify.On 方法时(例如,在方法调用期间),必须更新这些文件 OnGlobalSymbolRenamedIVsRefactorNotify.OnBefore方法调用使层次结构可以将生成的文件签出为一个单元。 层次结构可以选择在进行任何更改之前停止整个操作,前提是其中一个代码生成器无法使用重构操作。

  7. 如果 IVsRefactorNotify 实施者返回失败,则层次结构必须提醒用户有关错误。 层次结构可以继续操作,也可以取消并 stoop 重构操作。 如果操作已停止,则 HRESULT 包含以下值:

    E_ABORT

    OLE_E_PROMPTSAVECANCELLED

    OLECMDERR_E_CANCELED

    HR_E_CSHARP_USER_CANCEL。

  8. 如果 IVsRefactorNotify 实施者成功返回或调用方请求在失败时继续,则层次结构必须签出传递到的文件 IVsHierarchyRefactorNotify 以及从相应方法调用返回的文件 IVsRefactorNotify

    备注

    某些重构操作不会导致设计器文件发生更改,因此,设计器文件不会自动签出。 IVsRefactorNotify 如果内容由标识的重构操作更改,则该实施者必须请求签出设计器文件。 这是通过返回标识 out 数组中的设计器文件的 VSITEMID 来完成的。 例如,如果命名空间(存储在设计器文件外)发生更改,则不需要签出设计器文件。 尽管生成的代码文件发生了更改,但设计器文件不需要签出。

  9. 在签出后,该层次结构将从对 IVsHierarchyRefactorNotify.OnBefore 语言服务的调用返回。

  10. 语言服务执行重构操作。

  11. 语言服务通过调用方法(如)向层次结构通知完成重构操作的完成, IVsHierarchyRefactorNotify.On OnGlobalSymbolRenamed 并通过调用方法(如)通知所有 IVsRefactorNotify 实现者 IVsRefactorNotify.On OnGlobalSymbolRenamed 。 等效的重构更改在设计器文件中进行。 这可确保重构操作保持不变。

方法

OnAddParams(UInt32, String, UInt32, UInt32[], String[], String[])

在方法添加了参数后调用。

OnBeforeAddParams(UInt32, String, UInt32, UInt32[], String[], String[], Int32)

当方法即将添加参数时调用。

OnBeforeGlobalSymbolRenamed(UInt32, UInt32[], UInt32, String[], String, Int32)

当符号即将重命名时调用。

OnBeforeRemoveParams(UInt32, String, UInt32, UInt32[], Int32)

当方法将要移除参数时调用。

OnBeforeReorderParams(UInt32, String, UInt32, UInt32[], Int32)

当方法要重新排序参数时调用。

OnGlobalSymbolRenamed(UInt32, UInt32[], UInt32, String[], String)

重命名符号后调用。

OnRemoveParams(UInt32, String, UInt32, UInt32[])

在方法移除参数后调用。

OnReorderParams(UInt32, String, UInt32, UInt32[])

在方法重新排序了参数后调用。

适用于