ICorDebugModule2::ApplyChanges 方法

将元数据和 Microsoft 中间语言 (MSIL) 代码中的更改应用于正在运行的进程。

HRESULT ApplyChanges (
    [in] ULONG                       cbMetadata,
    [in, size_is(cbMetadata)] BYTE   pbMetadata[],
    [in] ULONG                       cbIL,
    [in, size_is(cbIL)] BYTE         pbIL[]
);

参数

  • cbMetadata
    [in] 增量元数据的大小(以字节为单位)。

  • pbMetadata
    [in] 包含增量元数据的缓冲区。 缓冲区的地址是从 IMetaDataEmit2::SaveDeltaToMemory 方法中返回的。

    元数据中的相对虚拟地址 (RVA) 应相对于 MSIL 代码的起始位置。

  • cbIL
    [in] 增量 MSIL 代码的大小(以字节为单位)。

  • pbIL
    [in] 包含已更新的 MSIL 代码的缓冲区。

备注

pbMetadata 参数采用特殊的增量元数据格式(由 IMetaDataEmit2::SaveDeltaToMemory 输出)。 pbMetadata 使用以前的元数据作为基数据,并描述要应用于这些基数据的各个更改。

相反,pbIL[] 参数包含已更新方法的新 MSIL,旨在完全替代该方法以前的 MSIL。

当在调试器内存中创建增量 MSIL 和元数据后,调试器将调用 ApplyChanges,以便将更改发送到公共语言运行时 (CLR) 中。 运行时将更新其元数据表、将新 MSIL 置于进程中并设置对新 MSIL 的实时 (JIT) 编译。 当应用更改后,调试器应调用 IMetaDataEmit2::ResetENCLog 来准备下一次编辑会话。 随后,调试器可以继续运行该进程。

每当调试器对包含增量元数据的模块调用 ApplyChanges 时,它还应使用相同的增量元数据对该模块元数据的所有副本(用于发出更改的副本除外)调用 IMetaDataEmit::ApplyEditAndContinue。 如果该元数据的某个副本因某种原因与实际元数据失去同步,则调试器可以始终丢弃该副本并获取新的副本。

如果 ApplyChanges 方法失败,则调试会话将处于无效状态,必须重新启动。

要求

**平台:**请参见 .NET Framework 系统要求

头文件: CorDebug.idl、CorDebug.h

**库:**CorGuids.lib

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

请参见

参考

ICorDebugModule2 接口

ICorDebugModule 接口