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 起提供