IVsHierarchyRefactorNotify 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通知重构操作的层次结构。
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 ,它表示层次结构、 IVsProject 和 IVsHierarchyRefactorNotify 接口。 还必须实现语言服务,以支持与代码编辑相关的功能,包括重构操作。 有关语言服务的详细信息,请参阅 旧版语言服务接口。
通过实现 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 。
重构操作失败时,层次结构必须在消息框中显示错误消息。
操作流
用户调用符号重命名或任何其他重构操作。
Visual Studio语言服务确定操作影响的代码文件。
语言服务调用
IVsHierarchyRefactorNotify.OnBefore方法,通知层次结构哪些文件受此操作影响。层次结构确定是否从设计器文件生成任何受影响的文件。
如果生成了文件,则层次结构将获取对实现的对象的引用, IVsRefactorNotify 并将
IVsRefactorNotify.OnBefore通知发送到 IVsRefactorNotify 每个生成的文件的实施者。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方法时(例如,在方法调用期间),必须更新这些文件 OnGlobalSymbolRenamed 。IVsRefactorNotify.OnBefore方法调用使层次结构可以将生成的文件签出为一个单元。 层次结构可以选择在进行任何更改之前停止整个操作,前提是其中一个代码生成器无法使用重构操作。如果 IVsRefactorNotify 实施者返回失败,则层次结构必须提醒用户有关错误。 层次结构可以继续操作,也可以取消并 stoop 重构操作。 如果操作已停止,则 HRESULT 包含以下值:
E_ABORT
OLE_E_PROMPTSAVECANCELLED
OLECMDERR_E_CANCELED
HR_E_CSHARP_USER_CANCEL。
如果 IVsRefactorNotify 实施者成功返回或调用方请求在失败时继续,则层次结构必须签出传递到的文件 IVsHierarchyRefactorNotify 以及从相应方法调用返回的文件 IVsRefactorNotify 。
备注
某些重构操作不会导致设计器文件发生更改,因此,设计器文件不会自动签出。 IVsRefactorNotify 如果内容由标识的重构操作更改,则该实施者必须请求签出设计器文件。 这是通过返回标识 out 数组中的设计器文件的 VSITEMID 来完成的。 例如,如果命名空间(存储在设计器文件外)发生更改,则不需要签出设计器文件。 尽管生成的代码文件发生了更改,但设计器文件不需要签出。
在签出后,该层次结构将从对
IVsHierarchyRefactorNotify.OnBefore语言服务的调用返回。语言服务执行重构操作。
语言服务通过调用方法(如)向层次结构通知完成重构操作的完成,
IVsHierarchyRefactorNotify.OnOnGlobalSymbolRenamed 并通过调用方法(如)通知所有 IVsRefactorNotify 实现者IVsRefactorNotify.OnOnGlobalSymbolRenamed 。 等效的重构更改在设计器文件中进行。 这可确保重构操作保持不变。