ICorDebugModule2::ApplyChanges 方法

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

语法

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)应相对于 CIL 代码的开头。

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

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

注解

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

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

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

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

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

要求

平台:请参阅系统要求

标头:CorDebug.idl、CorDebug.h

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用