Condividi tramite


Metodo ICorDebugModule2::ApplyChanges

Applica le modifiche nei metadati e le modifiche nel codice CIL (Common Intermediate Language) al processo in esecuzione.

Sintassi

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

Parametri

cbMetadata [in] Dimensioni, in byte, dei metadati differenziali.

pbMetadata [in] Buffer contenente i metadati differenziali. L'indirizzo del buffer viene restituito dal metodo IMetaDataEmit2::SaveDeltaToMemory .

Gli indirizzi virtuali relativi nei metadati devono essere relativi all'inizio del codice CIL.

cbIL [in] Dimensioni, in byte, del codice CIL differenziale.

pbIL [in] Buffer contenente il codice CIL aggiornato.

Osservazioni:

Il pbMetadata parametro è in un formato di metadati delta speciale (come output di IMetaDataEmit2::SaveDeltaToMemory). pbMetadata accetta i metadati precedenti come base e descrive le singole modifiche da applicare a tale base.

Al contrario, il pbIL[parametro ] contiene il nuovo CIL per il metodo aggiornato ed è destinato a sostituire completamente l'CIL precedente per tale metodo

Quando l'CIL differenziale e i metadati sono stati creati nella memoria del debugger, il debugger chiama ApplyChanges per inviare le modifiche in Common Language Runtime (CLR). Il runtime aggiorna le tabelle di metadati, inserisce il nuovo CIL nel processo e configura una compilazione JIT (Just-In-Time) del nuovo CIL. Dopo l'applicazione delle modifiche, il debugger deve chiamare IMetaDataEmit2::ResetENCLog per prepararsi alla sessione di modifica successiva. Il debugger può quindi continuare il processo.

Ogni volta che il debugger chiama ApplyChanges su un modulo con metadati differenziali, deve anche chiamare IMetaDataEmit::ApplyEditAndContinue con gli stessi metadati differenziali in tutte le copie dei metadati del modulo, ad eccezione della copia usata per generare le modifiche. Se una copia dei metadati diventa in qualche modo non sincronizzata con i metadati effettivi, il debugger può sempre gettare via tale copia e ottenere una nuova copia.

Se il ApplyChanges metodo ha esito negativo, la sessione di debug è in uno stato non valido e deve essere riavviata.

Requisiti

Piattaforme: vedere Requisiti di sistema.

Intestazione: CorDebug.idl, CorDebug.h

Libreria: CorGuids.lib

Versioni di .NET Framework: disponibili dalla versione 2.0