共用方式為


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

請參閱

參考

ICorDebugModule2

ICorDebugModule