Visual Studio에서 핫 다시 로드를 사용하여 실행 중인 코드 작성 및 디버그(C#, Visual Basic, C++)

Visual Studio 2022부터 Visual Studio의 핫 다시 로드 환경이 관리형 .NET 앱과 네이티브 C++ 앱 모두에 대해 작동합니다. 작업 중인 앱 유형과 관계없이 핫 다시 로드의 의도는 가능한 한 편집 간에 앱 다시 시작을 수행하는 횟수를 줄여 앱이 다시 빌드되거나 다시 시작되거나 앱 자체에 있던 이전 위치로 다시 이동할 때까지 기다리는 일 등에 걸리는 시간을 줄여 생산성을 높이는 것입니다.

애플리케이션의 코드 파일을 편집하고 코드 변경 내용을 실행 중인 애플리케이션에 즉시 적용할 수 있도록 하여(‘핫 다시 로드’라고도 함) 생산성을 높입니다. 변경 내용이 적용되면 앱 자체에서(또는 일종의 타이머 등을 통해) 작업을 수행하여 코드를 다시 실행하고 변경 내용을 즉시 확인합니다. 중단점을 통해 앱을 일시 중지할 필요가 없습니다!

핫 다시 로드를 사용하여 실행 중인 코드 업데이트

  1. 지원되는 애플리케이션 유형에 따라 프로젝트를 엽니다. .NETC++ 지원되는 애플리케이션을 참조하세요.

  2. F5 키를 사용하거나 지원되는 경우, Ctrl+F5를 사용하여 디버거가 연결된 앱을 시작합니다.

  3. 코드 파일을 열고 코드를 변경합니다.

  4. 핫 다시 로드 단추를 사용하여 코드 변경 내용을 적용하거나 Alt+F10을 누릅니다.

    Screenshot of the Hot Reload button.

사용자 인터페이스의 변경 내용을 보려면 코드를 다시 실행해야 합니다. 예를 들어 단추에 대한 코드 숨김은 다시 실행되거나 타이머를 통해 일정한 간격으로 트리거되는 코드입니다. 또 다른 예로 ASP.NET Core는 MetadataUpdateHandler 기능으로 인해 자동 브라우저 새로 고침을 지원합니다.

.NET 애플리케이션 지원

  • Visual Studio 2022를 사용하고 디버거를 사용하여 앱을 시작하는 경우 기본 핫 다시 로드 환경이 대부분 .NET 앱 유형과 프레임워크 버전에서 작동합니다. 여기에는 .NET Framework, .NET Core, .NET 5 이상(해당하는 경우 C# 및 Visual Basic 모두)이 포함됩니다. 이 시나리오에서는 디버거를 사용하는 경우 핫 다시 로드를 사용할 수 있다고 가정하므로 사용해 보세요!
  • Visual Studio 2022를 사용하지만, 디버거를 사용하지 않는 경우(예: Ctrl+F5를 사용하여 앱을 시작하는 경우) 대부분 .NET 6 앱 유형을 대상으로 하는 경우 핫 다시 로드를 사용할 수 있습니다. 즉, .NET 6(.NET 5 이하)을 대상으로 하지 않는 앱은 “디버거 없음” 시나리오를 지원하지 않으며 핫 다시 로드 지원을 이용하려면 디버거를 사용해야 합니다.
  • .NET 6 앱에서 Visual Studio 2022를 사용하는 경우 대부분 시나리오가 지원됩니다. 이는 위에서 언급한 새로운 “디버거 없음” 기능으로 제한되지 않습니다. 또한 Blazor 프로젝트 핫 다시 로드 지원과 더 일반적으로는 모든 ASP.NET Core 앱에서 Razor 파일 편집, CSS 핫 다시 로드 등의 다른 새로운 기능도 포함됩니다. Visual Studio 2022와 .NET 6을 대상으로 하는 앱을 사용하면 가장 강력한 핫 다시 로드 환경을 이용할 수 있습니다.

다음 표에서는 Visual Studio 2022(17.8)에서 지원하는 데 필요한 최소 .NET 버전에 따라 디버거가 연결된 경우(F5 키) 및 디버거가 연결되지 않은 경우(Ctrl+F5)로 .NET 핫 다시 로드를 지원하는 프로젝트를 보여 줍니다.

응용 프로그램 유형 F5 Ctrl+F5 MetadataUpdateHandler 지원
콘솔 .NET 6 .NET 6
Linux/macOS에서 실행
(Docker 및 WSL)
.NET 8 .NET 6 .NET 8
Arm64에서 실행 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor Server .NET 6 .NET 6 .NET 6
Blazor WebAssembly .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

핫 다시 로드를 사용하여 편집할 수 있는 유형은 애플리케이션을 시작하는 데 사용한 방법(F5 키 또는 Ctrl+F5)이 아니라 런타임 및 컴파일러 버전에 의해 결정됩니다.

다음 섹션에서는 위의 요약을 확장하여 자세한 내용을 살펴보겠습니다.

C++ 애플리케이션 지원

Visual Studio 2022를 사용하고 디버거를 사용하여 앱을 시작하는 경우 디버거(F5)에서 실행할 때 핫 다시 로드 단추를 사용하여 네이티브 C++ 애플리케이션을 핫 다시 로드할 수 있습니다. 핫 다시 로드는 CMake 및 OpenFolder 프로젝트를 사용하여 빌드된 앱에도 지원됩니다.

프로젝트가 핫 다시 로드를 지원하려면 다음이 필요합니다.

  • 프로젝트 > 속성 > C/C++ > 일반 >디버그 정보 형식을 "/ZI 편집하며 계속하기용 프로그램 데이터베이스"로 설정해야 합니다.
  • 프로젝트 > 속성 > 링커 > 일반 >증분 링크 사용은 "예 /INCREMENTAL"로 설정해야 합니다.

지원되는 편집 내용은 C++ 지원되는 코드 변경을 참조하세요.

디버거를 사용하는 경우 .NET 앱과 Visual Studio 2022

Visual Studio 2022를 사용하고 디버거를 사용하여 앱을 시작하는 경우 핫 다시 로드는 대부분의 앱 프레임워크에서 작동합니다.

.NET이 있고 Visual Studio 관리형 디버거를 사용하는 모든 경우에 기본 핫 다시 로드 지원을 이용할 수 있습니다. 즉, Azure Functions와 같은 프로젝트도 이 시나리오에서 잘 작동합니다.

참고 항목

일부 프로젝트에서는 기본적으로 핫 다시 로드를 지원하지 않는 혼합 모드 디버깅을 사용합니다. 프로젝트 > 속성 > 디버그 > 디버그 시작 프로필 UI 열기 > 네이티브 코드 디버깅 사용을 false로 설정하여 프로젝트 설정에서 이를 수정할 수 있습니다.

디버거를 사용하지 않는 경우 .NET 앱과 Visual Studio 2022

대부분 .NET 6 앱 유형을 대상으로 하는 경우 디버거 없이 핫 다시 로드를 사용할 수 있습니다.

이 기능은 .NET 6 이상 전용입니다. .NET 6+(예: .NET 5 이하)을 대상으로 하지 않는 앱은 “디버거 없음” 시나리오를 지원하지 않으며 핫 다시 로드 기능에 액세스하려면 디버거를 사용해야 합니다.

일부 프로젝트 형식은 현재 “디버거 없음” 시나리오를 지원하지 않습니다. .NET 애플리케이션 지원을 참조하세요.

.NET 6+ 앱과 Visual Studio 2022

Visual Studio 2022를 사용하고 .NET 6+를 대상으로 하는 앱에서 작업하는 경우 가장 유용하고 강력한 핫 다시 로드 환경의 이점을 얻을 수 있습니다.

다음 시나리오에서 지원됩니다.

  • Blazor 앱(Server 및 WebAssembly)
  • Blazor 및 일반 ASP.NET Core 웹 사이트에서 Razor 파일 편집
  • CSS 핫 다시 로드
  • XAML 핫 다시 로드
  • 디버거를 사용하지 않고 앱을 실행할 때 핫 다시 로드 지원(앞에서 자세히 설명했음)

.NET 6+를 대상으로 하는 경우 예정된 Visual Studio 2022 업데이트 및 .NET 기능 밴드와 주요 릴리스를 통해 계속 개선 사항을 이용할 수 있습니다.

지원되는 ASP.NET Core 시나리오

기본 핫 다시 로드 환경은 많은 ASP.NET 시나리오에서 지원됩니다. 가장 폭넓게 사용할 수 있는 기능은 대부분 웹 애플리케이션 유형의 코드 숨김과 기타 .NET 클래스 파일을 변경하는 기능입니다. 이 기능은 Visual Studio 디버거를 사용하는 동안 작동하며, 이전에 핫 다시 로드가 제공된 모든 위치에 있습니다. 특정 지침은 ASP.NET Core에 대한 .NET 핫 다시 로드 지원을 참조하세요.

.NET 6+를 대상으로 하는 ASP.NET Core 개발자의 경우 낮은 .NET 버전에는 사용할 수 없는 추가 기능이 있습니다. 이러한 기능은 다음과 같습니다.

  • CSHTML: Razor CSHTML 파일 편집은 많은 유형의 편집 내용을 지원합니다.
  • 브라우저 새로 고침: 디버그할 때 Razor 파일을 편집하면 웹 브라우저의 변경 내용이 자동으로 새로 고쳐집니다. 이전에는 디버거를 사용하지 않고 앱을 시작할 때만 이 기능을 사용할 수 있었습니다.
  • CSS 핫 다시 로드: 앱이 실행되는 동안 CSS 파일을 변경할 수 있으며, 사용자가 입력하면 실행 중인 앱에 변경 내용이 즉시 적용됩니다.
  • 디버거 없음: Visual Studio를 사용하여 디버거를 사용하지 않고 웹앱을 시작하는 경우(CTRL+F5) 핫 다시 로드 지원을 이용할 수 있습니다.

지원되는 .NET 변경 내용

.NET 핫 다시 로드 환경은 디버거 및 C# 컴파일러(Roslyn)를 통해 제공됩니다. Roslyn에서 지원되는 편집지원되는 코드 변경(C# 및 VB)에는 현재 지원되는 편집 유형과 향후 향상된 기능이 나열되어 있습니다.

지원되지 않는 .NET 프로젝트

다음과 같은 일부 프로젝트 구성에서는 핫 다시 로드를 사용할 수 없습니다.

  • 디버거 없이 Visual Studio를 사용하는 경우 핫 다시 로드는 .NET 6+를 대상으로 하는 .NET 앱에만 작동합니다.
  • Visual Studio 디버거를 사용하여 앱을 실행하고 있지만, 설정에서 Enable Hot Reload and Edit and Continue when debugging를 사용하지 않도록 설정한 경우 핫 다시 로드는 지원되지 않습니다.
  • 릴리스 또는 사용자 지정 빌드 구성은 지원되지 않습니다. 프로젝트에서 Debug 빌드 구성을 사용해야 합니다.
  • F# 또는 .NET 네이티브 프로젝트를 대상으로 하는 경우.
  • 일부 시작 또는 컴파일 최적화는 .NET 핫 다시 로드에서 지원되지 않습니다. 예를 들어 프로젝트의 디버그 프로필이 다음과 같은 방식으로 구성된 경우 .NET 핫 다시 로드가 지원되지 않습니다.
    • 프로젝트에 대해 트리밍이 사용하도록 설정되어 있습니다. 예를 들어 프로젝트 파일에서 디버그 프로필에 대해 PublishTrimmed가 True로 설정된 경우에는 지원되지 않습니다.
    • 프로젝트에 대해 ReadyToRun이 사용하도록 설정되어 있습니다. 예를 들어 프로젝트 파일에서 디버그 프로필에 대해 PublishReadyToRun이 True로 설정된 경우에는 지원되지 않습니다.

자세한 내용은 지원되지 않는 시나리오를 참조하세요.

핫 다시 로드 구성

핫 다시 로드 사용하거나 사용하지 않도록 설정하거나 구성하려면 편집 및 계속 구성을 참조하세요.

경고 메시지

다음과 같은 대화 상자가 표시되면 핫 다시 로드에서 다시 시작하지 않고는 현재 편집 내용을 적용할 수 없습니다. 앱을 다시 빌드하고 변경 내용을 적용(다시 시작)하거나 편집을 계속할 수 있습니다. 다시 빌드하면 모든 애플리케이션 상태가 손실됩니다. 편집을 계속하면 추가 변경이나 수정으로 인해 핫 다시 로드가 다시 작동할 수도 있습니다.

Screenshot of the apply changes dialog box

대화 상자에서 변경 내용을 적용할 수 없는 경우 항상 다시 빌드 옵션을 선택하면 현재 Visual Studio 세션에서 이 대화 상자가 다시 표시되지 않으며, Visual Studio에서 대화 상자를 표시하는 대신 자동으로 다시 빌드하고 다시 로드합니다.

문제 해결

핫 다시 로드 세션에 대한 자세한 진단 정보는 핫 다시 로드 출력 창을 확인하는 것이 좋습니다.

.NET Core에서 응답 압축을 사용하는 경우 응답 압축에 대한 정보를 참조하세요.