将元数据中的更改和公共中间语言 (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 起提供