更新 : 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
[入力] デルタ メタデータのサイズ (バイト単位)。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
ライブラリ : CorGuids.lib
.NET Framework のバージョン : 3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0