다음을 통해 공유


ICorDebugModule2::ApplyChanges 메서드

메타데이터의 변경 내용과 MSIL(Microsoft Intermediate Language) 코드의 변경 내용을 실행 중인 프로세스에 적용합니다.

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(상대 가상 주소)는 MSIL 코드의 시작 위치를 기준으로 해야 합니다.

  • cbIL
    [in] 델타 MSIL 코드의 크기(바이트)입니다.

  • pbIL
    [in] 업데이트된 MSIL 코드가 포함된 버퍼입니다.

설명

pbMetadata 매개 변수는 IMetaDataEmit2::SaveDeltaToMemory에서 출력되는 특수한 델타 메타데이터 형식입니다. pbMetadata는 이전 메타데이터를 기준으로 사용하여 이 기준에 적용할 개별 변경 내용을 설명합니다.

이와 달리 pbIL[] 매개 변수에는 업데이트된 메서드에 대한 이전 MSIL을 완전히 대체하는 새 MSIL이 포함됩니다.

델타 MSIL 및 메타데이터가 디버거의 메모리에서 만들어졌으면 디버거에서는 ApplyChanges를 호출하여 변경 내용을 CLR(공용 언어 런타임)로 보냅니다. 그러면 런타임에서는 메타데이터 테이블을 업데이트하고, 프로세스에 새 MSIL을 배치하고, 새 MSIL의 JIT(Just-In-Time) 컴파일을 설정합니다. 변경 내용이 적용된 경우 디버거에서는 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

참고 항목

참조

ICorDebugModule2 인터페이스

ICorDebugModule 인터페이스