지원되는 코드 변경(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+ 핫 다시 로드 환경은 편집하며 계속하기 메커니즘 및 Roslyn으로 구동됩니다. 지원되는 편집에는 Roslyn에서 현재 지원되는 편집 유형과 향후 향상된 기능이 나열되어 있습니다.

지원되지 않는 코드 변경

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

  • 현재 문 또는 다른 모든 활성 문에 대한 변경

    활성 문은 호출 스택의 함수에서 현재 문을 실행하기 위해 호출된 모든 문입니다.

    현재 문은 소스 창에서 노란색 배경에 나타납니다. 다른 활성 문은 회색 배경에 표시되고 읽기 전용입니다. 이러한 기본 색상은 옵션 대화 상자에서 변경할 수 있습니다.

  • 다음 표에 설명된 대로 언어 요소에서 지원되지 않는 코드 변경이 있습니다.

    언어 요소 또는 기능 지원되지 않는 편집 작업
    모든 코드 요소 이름 바꾸기
    네임스페이스 추가
    네임스페이스, 형식, 멤버 삭제
    인터페이스 수정
    유형 추상 또는 가상 멤버 추가, 재정의 추가(세부 정보 참조)
    유형 소멸자 추가
    멤버 - 포함된 interop 형식을 참조하는 멤버 수정
    - 코드를 실행하여 이미 액세스한 후 정적 멤버 수정
    멤버(Visual Basic) - On Error 또는 Resume 문을 사용하여 멤버 수정
    - Aggregate, Group By, Simple Join 또는 Group Join LINQ 쿼리 절이 포함된 멤버 수정
    메서드 - 시그니처 수정
    - 메서드 본문을 추가하여 추상 메서드가 비추상 메서드가 되도록 설정
    - Delete 메서드 본문
    특성 추가 또는 수정
    이벤트 또는 속성 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    연산자 또는 인덱서 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    catch 블록 활성 문이 포함된 경우 수정
    try-catch-finally 블록 활성 문이 포함된 경우 수정
    using 문 추가
    비동기 메서드/람다 .NET Framework 4 이하를 대상으로 하는 프로젝트에서 비동기 메서드/람다 수정(세부 정보 참조).
    반복기 .NET Framework 4 이전 버전을 대상으로 하는 프로젝트에서 반복기 수정(세부 정보 참조)
    언어 요소 또는 기능 지원되지 않는 편집 작업
    모든 코드 요소 이름 바꾸기
    네임스페이스 추가
    네임스페이스, 형식, 멤버 삭제
    제네릭 추가 또는 수정
    인터페이스 수정
    유형 추상 또는 가상 멤버 추가, 재정의 추가(세부 정보 참조)
    유형 소멸자 추가
    멤버 - 포함된 interop 형식을 참조하는 멤버 수정
    - 코드를 실행하여 이미 액세스한 후 정적 멤버 수정
    멤버(Visual Basic) - On Error 또는 Resume 문을 사용하여 멤버 수정
    - Aggregate, Group By, Simple Join 또는 Group Join LINQ 쿼리 절이 포함된 멤버 수정
    메서드 - 시그니처 수정
    - 메서드 본문을 추가하여 추상 메서드가 비추상 메서드가 되도록 설정
    - Delete 메서드 본문
    특성 추가 또는 수정
    이벤트 또는 속성 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    연산자 또는 인덱서 형식 매개 변수, 기본 형식, 대리자 형식 또는 반환 형식 수정
    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 환경 변수를 사용하여 디버깅합니다.

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

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

  • 최적화된 코드 디버깅

  • SQL 디버깅

  • 덤프 파일 디버깅

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

  • 빌드 오류가 발생하여 새 버전을 빌드하는 데 실패한 후 이전 버전의 코드 디버깅