メタデータの変更と共通中間言語 (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 以降で使用可能
.NET