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 ,以將變更傳送至 Common Language Runtime (CLR)。 運行時間會更新其元數據表、將新的 CIL 放入進程,並設定新 CIL 的 Just-In-Time (JIT) 編譯。 套用變更后,調試程式應該呼叫 IMetaDataEmit2::ResetENCLog 來準備下一個編輯會話。 然後調試程式可以繼續此程式。

每當調試程式在具有差異元數據的模組上呼叫ApplyChanges時,它也應該呼叫 IMetaDataEmit::ApplyEditAndContinue,並在該模組元數據的所有複本上使用相同的差異元數據,但用來發出變更的複本除外。 如果元數據複本以某種方式與實際元數據不同步,調試程式一律可以擲回該複本並取得新的複本。

ApplyChanges如果方法失敗,偵錯會話會處於無效狀態,而且必須重新啟動。

需求

平台:請參閱系統需求

標頭:CorDebug.idl、CorDebug.h

程式庫:CorGuids.lib

.NET Framework 版本: 自 2.0 起提供