다음을 통해 공유


지원되는 코드 변경(C# 및 Visual Basic)

이전에 편집하며 계속하기라고 하던 핫 다시 로드 메커니즘은 메서드 본문 내에서 대부분의 코드 변경 형식을 처리합니다. 그러나 메서드 본문 외부의 대부분의 변경 내용과 메서드 본문 내의 몇 가지 변경 내용은 디버깅 중에 적용할 수 없습니다. 지원되지 않는 변경 내용을 적용하려면 디버깅을 중지하고 새 버전의 코드로 다시 시작해야 합니다.

편집하며 계속하기 메커니즘은 메서드 본문 내에서 대부분의 코드 변경 형식을 처리합니다. 그러나 메서드 본문 외부의 대부분의 변경 내용과 메서드 본문 내의 몇 가지 변경 내용은 디버깅 중에 적용할 수 없습니다. 지원되지 않는 변경 내용을 적용하려면 디버깅을 중지하고 새 버전의 코드로 다시 시작해야 합니다.

코드에 지원되는 변경 내용

다음 표에서는 세션을 다시 시작하지 않고 디버깅 세션 중에 C# 및 Visual Basic 코드에 대해 변경될 수 있는 변경 내용을 보여줍니다.

언어 요소 또는 기능 지원되는 편집 작업 제한사항
유형 메서드, 필드, 생성자 등 추가
반복기 추가 또는 수정 아니요
async/await 식 추가 또는 수정
동적 개체 추가 또는 수정 아니요
람다 표현식 추가 또는 수정
LINQ 식 추가 또는 수정 람다 식과 동일
제네릭 추가 또는 수정
언어 요소 또는 기능 지원되는 편집 작업 제한
유형 메서드, 필드, 생성자 등 추가
반복기 추가 또는 수정 아니요
async/await 식 추가 또는 수정
동적 개체 추가 또는 수정 아니요
람다 식 추가 또는 수정
LINQ 식 추가 또는 수정 람다 식과 동일

메모

문자열 보간 및 null 조건부 연산자와 같은 최신 언어 기능은 일반적으로 편집 및 계속에서 지원됩니다. 최신 정보는 Enc 지원 편집 페이지를 참조하세요.

.NET 6+ 개선 사항

.NET 6 이상 및 Visual Studio 2022 이상 버전의 향상된 기능에는 이전 버전의 Visual Studio에서 원래 가능했던 것보다 많은 편집 유형에 대한 지원이 포함됩니다. 이러한 개선 사항은 핫 다시 로드 및 편집 및 계속 환경 모두에서 사용할 수 있습니다.

.NET 6+ 핫 리로드 경험은 Edit and Continue 메커니즘과 Roslyn을 통해 제공됩니다. 지원되는 편집 Roslyn에서 현재 지원되는 편집 유형과 잠재적인 향후 개선 사항을 나열합니다.

지원되지 않는 코드 변경 내용

디버깅 세션 중에는 C# 및 Visual Basic 코드에 다음 변경 내용을 적용할 수 없습니다.

  • 현재 문 또는 다른 활성 문에 대한 변경 사항.

    활성 문장은 현재 문장에 도달하기 위해 호출된 호출 스택의 함수 내에 있는 모든 문장입니다.

    현재 문은 원본 창의 노란색 배경에 나타납니다. 다른 활성 문장은 음영 처리된 배경에 표시되며 읽기 전용으로 제공됩니다. 이러한 기본 색은 옵션 대화 상자에서 변경할 수 있습니다.

  • 다음 표에 설명된 대로 언어 요소별로 지원되지 않는 코드 변경 내용입니다.

    언어 요소 또는 기능 지원되지 않는 편집 작업
    모든 코드 요소 이름 바꾸기
    네임스페이스 더하다
    네임스페이스, 형식, 멤버 삭제
    인터페이스 수정하다
    유형 추상 또는 가상 멤버 추가, 재정의 추가(세부 정보참조)
    종류 소멸자 추가
    회원 - 임베디드 interop 타입을 참조하는 멤버 수정
    - 코드를 실행하여 정적 멤버에 접근한 후에, 정적 멤버를 수정합니다.
    멤버(Visual Basic) - On Error 또는 Resume 문을 사용하여 멤버 수정
    - 집계, 그룹화, 단순 조인 또는 그룹 조인 LINQ 쿼리 절을 포함하는 멤버 수정
    방법 - 서명 수정
    - 메서드 본문을 추가하여 추상 메서드를 비추상 메서드로 만들기
    - 메서드 본문 삭제
    특성 추가 또는 수정
    이벤트 또는 속성 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    연산자 또는 인덱서 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    캐치 블록 활성 구문이 포함된 경우 수정
    try-catch-finally 블록 활성 문장이 포함된 경우 수정하세요.
    사용 문장 더하다
    비동기 메서드/람다 .NET Framework 4 이하를 대상으로 하는 프로젝트에서 비동기 메서드/람다 수정(자세한 내용은 참조)
    반복자 .NET Framework 4 이하를 대상으로 하는 프로젝트에서 반복기를 수정(세부 정보참조)
    언어 요소 또는 기능 지원되지 않는 편집 작업
    모든 코드 요소 이름 바꾸기
    네임스페이스 더하다
    네임스페이스, 형식, 멤버 삭제
    제네릭 추가 또는 수정
    인터페이스 수정하다
    유형 추상 또는 가상 멤버를 추가하고 재정의를 추가하십시오(세부 정보참조)
    유형 소멸자 추가
    회원 - 포함된 interop 형식을 참조하는 멤버를 수정
    - 정적 멤버를 이미 액세스한 후 코드를 실행하여 해당 멤버를 수정합니다.
    멤버(비주얼 베이직) - On Error 또는 Resume 문을 사용하여 멤버를 수정하기
    - 집계, 그룹화 기준, 단순 조인 또는 그룹 조인 LINQ 쿼리 절이 포함된 멤버 수정
    방법 - 서명 수정
    - 메서드 본문을 추가하여 추상 메서드를 비추상 메서드로 만들기
    - 메서드 본문 삭제
    특성 추가 또는 수정
    이벤트 또는 속성 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    연산자 또는 인덱서 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    catch 블록 활성 문이 포함된 경우 수정
    try-catch-finally 블록 활성 문이 포함된 경우, 그것을 수정하십시오.
    using 문장 더하다
    비동기 메서드/람다 .NET Framework 4 이하를 대상으로 하는 프로젝트에서 비동기 메서드/람다를 수정하십시오 (세부 정보는 ,참조)
    반복기 .NET Framework 4 및 이전 버전을 대상으로 하는 프로젝트에서 이터레이터 수정(세부 정보참조)

안전하지 않은 코드

안전하지 않은 코드의 변경 내용에는 안전 코드 변경과 동일한 제한 사항이 있으며, 한 가지 추가 제한 사항이 있습니다. 편집하며 계속하기는 stackalloc 연산자를 포함하는 메서드 내에서 종료되는 안전하지 않은 코드에 대한 변경 내용을 지원하지 않습니다.

애플리케이션 지원

지원되는 애플리케이션은 다음과 같습니다.

  • Windows 10 또는 Windows 11의 UWP 앱
  • .NET Framework 4.6 데스크톱 이상 버전을 대상으로 하는 x86 및 x64 앱(.NET Framework는 데스크톱 버전에만 해당)

.NET 6 이상에서는 다음 파일 형식에 대해 편집이 지원됩니다.

  • .cshtml
  • .razor

지원되지 않는 앱, 플랫폼 및 작업

지원되지 않는 애플리케이션 또는 플랫폼은 다음과 같습니다.

  • F#
  • .NET 네이티브
  • Silverlight 5
  • Windows 8.1
  • Xamarin.Forms(iOS 및 Android)

ASP.NET 및 ASP.NET Core의 경우 다음 파일 형식에 대해 편집이 지원되지 않습니다.

  • .aspx
  • .ascx
  • .aspx
  • .ascx
  • .cshtml
  • .razor

지원되지 않는 시나리오

편집하며 계속하기는 다음 디버깅 시나리오에서 사용할 수 없습니다.

  • 혼합 모드(네이티브/관리형) 디버깅

  • .NET 7 이상을 대상으로 하지 않고 Arm64에서 디버깅

  • COR_ENABLE_PROFILING 환경 변수 집합을 사용하여 디버깅합니다.

  • 디버그 메뉴에서 시작 선택하여 애플리케이션을 실행하는 대신 프로세스에 연결(디버그 > 프로세스연결)을 사용하여 애플리케이션을 디버깅합니다. 프로세스에 연결할 때 Edit and Continue를 사용하려면 프로세스(set COMPLUS_ForceENC=1)를 시작하기 전에 COMPLUS_ForceENC 환경 변수를 설정해야 합니다.

  • 비결정적(예: 시간 기반) 어셈블리 버전으로 디버깅 편집하며 계속하려면 릴리스(또는 CI) 빌드에서만 버전을 설정하고 디버그 빌드에서 버전을 일정하게 유지하는 것이 좋습니다.

  • 최적화된 코드 디버깅

  • SQL 디버깅.

  • 덤프 파일 디버깅

  • 포함된 런타임 애플리케이션 디버깅

  • 빌드 오류로 인해 새 버전을 빌드하지 못한 후 이전 버전의 코드를 디버깅합니다.