ICorDebugModule2::ApplyChanges 方法
更新:2007 年 11 月
將中繼資料中的變更和 Microsoft Intermediate Language (MSIL) 程式碼中的變更,套用至執行中的處理序。
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) 應相對於 MSIL 程式碼開頭。
cbIL
[in] 差異 MSIL 程式碼的大小 (以位元組為單位)。pbIL
[in] 包含更新版 MSIL 程式碼的緩衝區。
備註
pbMetadata 參數採用特殊的差異中繼資料格式 (由 IMetaDataEmit2::SaveDeltaToMemory 輸出)。pbMetadata 會以先前的中繼資料做為基底,並描述套用至該基底的個別變更。
相反地,pbIL[] 參數則包含已更新方法的新 MSIL,而且是要用來完全取代該方法先前的 MSIL。
當偵錯工具的記憶體中已建立差異 MSIL 和中繼資料時,偵錯工具會呼叫 ApplyChanges,將變更傳送至 Common Language Runtime (CLR)。執行階段會更新其中繼資料表、將新的 MSIL 置於處理序中,並且設定此新 MSIL 的 Just-In-Time (JIT) 編譯。已套用變更時,偵錯工具應呼叫 IMetaDataEmit2::ResetENCLog,以準備下一個編輯工作階段。偵錯工具就可以繼續此處理序。
每次偵錯工具在具有差異中繼資料的模組上呼叫 ApplyChanges 時,同時也應在該模組的所有中繼資料複本上 (除了用來發出變更的複本),以相同的差異中繼資料來呼叫 IMetaDataEmit::ApplyEditAndContinue。如果中繼資料複本變得與實際中繼資料不同步,則偵錯工具永遠可以丟掉該複本並且取得新複本。
如果 ApplyChanges 方法失敗,則偵錯工作階段會處於無效狀態,而且必須重新啟動。
需求
**平台:**請參閱 .NET Framework 系統需求。
**標頭:**CorDebug.idl
**程式庫:**CorGuids.lib
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0