ICorDebugModule2::ApplyChanges Method

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

Syntax

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

Parameters

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

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

元数据中的相对虚拟地址(RVA)应相对于 CIL 代码的开头。

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

pbIL [in]包含更新的 CIL 代码的缓冲区。

Remarks

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

相反, pbIL[] 参数包含更新方法的新 CIL,并且旨在完全替换该方法的上一个 CIL

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

每当调试器调用 ApplyChanges 具有增量元数据的模块时,它还应调用 IMetaDataEmit::ApplyEditAndContinue ,该模块的所有元数据副本上具有相同的增量元数据,但用于发出更改的副本除外。 如果元数据的副本以某种方式与实际元数据不同步,调试器始终可以丢弃该副本并获取新副本。

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

Requirements

平台:请参阅系统要求

标头:CorDebug.idl、CorDebug.h

Library: CorGuids.lib

.NET Framework 版本:自 2.0 起提供