メタデータの変更および 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
[入力] デルタ メタデータのサイズ (バイト単位)。pbMetadata
[入力] デルタ メタデータを格納するバッファー。 バッファーのアドレスは、IMetaDataEmit2::SaveDeltaToMemory メソッドから返されます。メタデータの相対仮想アドレス (RVA: Relative Virtual Address) は、MSIL コードの先頭を基準とする必要があります。
cbIL
[入力] デルタ MSIL コードのサイズ (バイト単位)。pbIL
[入力] 更新された MSIL コードを格納するバッファー。
解説
pbMetadata パラメーターは、特別なデルタ メタデータ形式です (IMetaDataEmit2::SaveDeltaToMemory によって出力)。 pbMetadata は、前のメタデータをベースとして使用し、個々の変更を記述してそのベースに適用します。
これに対して、pbIL[] パラメーターには更新されたメソッドの新しい MSIL が格納され、そのメソッドの以前の MSIL を完全に置き換えます。
デバッガーのメモリでデルタ MSIL とメタデータが作成されると、デバッガーは ApplyChanges を呼び出して、変更内容を共通言語ランタイム (CLR: Common Language Runtime) に送信します。 ランタイムはメタデータ テーブルを更新し、新しい MSIL をプロセスに配置して、新しい MSIL の Just-In-Time (JIT) コンパイラを設定します。 変更が適用されると、デバッガーは IMetaDataEmit2::ResetENCLog を呼び出して、次の編集セッションを準備する必要があります。 デバッガーはプロセスを続行することもできます。
デルタ メタデータを持つモジュールでデバッガーが ApplyChanges を呼び出す場合、変更内容の出力に使用されるコピーを除いて、そのモジュールのメタデータのすべてのコピーで同じメタデータを持つ IMetaDataEmit::ApplyEditAndContinue も呼び出す必要があります。 メタデータのコピーが実際のメタデータと同期しなくなると、デバッガーはそのコピーを破棄して、新しいコピーを取得できます。
ApplyChanges メソッドが失敗すると、デバッグ セッションは無効な状態になるため、再起動する必要があります。
必要条件
プラットフォーム: 「.NET Framework システム要件」を参照
ヘッダー: CorDebug.idl、CorDebug.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0