次の方法で共有


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 を呼び出して、変更を共通言語ランタイム (CLR) に送信します。 ランタイムはメタデータ テーブルを更新し、新しい CIL をプロセスに配置し、新しい CIL の Just-In-Time (JIT) コンパイルを設定します。 変更が適用されると、デバッガーは IMetaDataEmit2::ResetENCLog を呼び出して、次の編集セッションに備える必要があります。 その後、デバッガーでプロセスを続行できます。

デバッガーは、デルタ メタデータを持つモジュールで ApplyChanges を呼び出すたびに、変更の出力に使用されるコピーを除き、そのモジュールのメタデータのすべてのコピーで同じデルタ メタデータを使用して IMetaDataEmit::ApplyEditAndContinue も呼び出す必要があります。 メタデータのコピーが実際のメタデータと何らかの形で同期しなくなった場合、デバッガーは常にそのコピーを捨てて新しいコピーを取得できます。

ApplyChanges メソッドが失敗した場合、デバッグ セッションは無効な状態であり、再起動する必要があります。

Requirements

プラットフォーム:サポートされている .NET オペレーティング システムを参照してください。

ヘッダ: CorDebug.idl、CorDebug.h

図書館: CorGuids.lib

.NET のバージョン: .NET Framework 2.0 以降で使用可能