ICorDebugModule2::ApplyChanges Method

Applies the changes in the metadata and the changes in the common intermediate language (CIL) code to the running process.

Syntax

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

Parameters

cbMetadata [in] Size, in bytes, of the delta metadata.

pbMetadata [in] Buffer that contains the delta metadata. The address of the buffer is returned from the IMetaDataEmit2::SaveDeltaToMemory method.

The relative virtual addresses (RVAs) in the metadata should be relative to the start of the CIL code.

cbIL [in] Size, in bytes, of the delta CIL code.

pbIL [in] Buffer that contains the updated CIL code.

Remarks

The pbMetadata parameter is in a special delta metadata format (as output by IMetaDataEmit2::SaveDeltaToMemory). pbMetadata takes previous metadata as a base and describes individual changes to apply to that base.

In contrast, the pbIL[] parameter contains the new CIL for the updated method, and is meant to completely replace the previous CIL for that method

When the delta CIL and the metadata have been created in the debugger’s memory, the debugger calls ApplyChanges to send the changes into the common language runtime (CLR). The runtime updates its metadata tables, places the new CIL into the process, and sets up a just-in-time (JIT) compilation of the new CIL. When the changes have been applied, the debugger should call IMetaDataEmit2::ResetENCLog to prepare for the next editing session. The debugger may then continue the process.

Whenever the debugger calls ApplyChanges on a module that has delta metadata, it should also call IMetaDataEmit::ApplyEditAndContinue with the same delta metadata on all of its copies of that module’s metadata except for the copy used to emit the changes. If a copy of the metadata somehow becomes out-of-sync with the actual metadata, the debugger can always throw away that copy and obtain a new copy.

If the ApplyChanges method fails, the debug session is in an invalid state and must be restarted.

Requirements

Platforms: See System Requirements.

Header: CorDebug.idl, CorDebug.h

Library: CorGuids.lib

.NET Framework Versions: Available since 2.0