Visual Studio에서 핫 다시 로드를 사용하여 실행 중인 코드 작성 및 디버그(C#, Visual Basic, C++)
Visual Studio 2022부터 Visual Studio의 핫 다시 로드 환경이 관리형 .NET 앱과 네이티브 C++ 앱 모두에 대해 작동합니다. 작업 중인 앱 유형과 관계없이 핫 다시 로드의 의도는 가능한 한 편집 간에 앱 다시 시작을 수행하는 횟수를 줄여 앱이 다시 빌드되거나 다시 시작되거나 앱 자체에 있던 이전 위치로 다시 이동할 때까지 기다리는 일 등에 걸리는 시간을 줄여 생산성을 높이는 것입니다.
애플리케이션의 코드 파일을 편집하고 코드 변경 내용을 실행 중인 애플리케이션에 즉시 적용할 수 있도록 하여(‘핫 다시 로드’라고도 함) 생산성을 높입니다. 변경 내용이 적용되면 앱 자체에서(또는 일종의 타이머 등을 통해) 작업을 수행하여 코드를 다시 실행하고 변경 내용을 즉시 확인합니다. 중단점을 통해 앱을 일시 중지할 필요가 없습니다!
핫 다시 로드를 사용하여 실행 중인 코드 업데이트
지원되는 애플리케이션 유형에 따라 프로젝트를 엽니다. .NET 및 C++ 지원되는 애플리케이션을 참조하세요.
F5 키를 사용하거나 지원되는 경우, Ctrl+F5를 사용하여 디버거가 연결된 앱을 시작합니다.
코드 파일을 열고 코드를 변경합니다.
핫 다시 로드 단추를 사용하여 코드 변경 내용을 적용하거나 Alt+F10을 누릅니다.
사용자 인터페이스의 변경 내용을 보려면 코드를 다시 실행해야 합니다. 예를 들어 단추에 대한 코드 숨김은 다시 실행되거나 타이머를 통해 일정한 간격으로 트리거되는 코드입니다. 또 다른 예로 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로 설정된 경우에는 지원되지 않습니다.
- 프로젝트에 대해 트리밍이 사용하도록 설정되어 있습니다. 예를 들어 프로젝트 파일에서 디버그 프로필에 대해
자세한 내용은 지원되지 않는 시나리오를 참조하세요.
핫 다시 로드 구성
핫 다시 로드 사용하거나 사용하지 않도록 설정하거나 구성하려면 편집 및 계속 구성을 참조하세요.
경고 메시지
다음과 같은 대화 상자가 표시되면 핫 다시 로드에서 다시 시작하지 않고는 현재 편집 내용을 적용할 수 없습니다. 앱을 다시 빌드하고 변경 내용을 적용(다시 시작)하거나 편집을 계속할 수 있습니다. 다시 빌드하면 모든 애플리케이션 상태가 손실됩니다. 편집을 계속하면 추가 변경이나 수정으로 인해 핫 다시 로드가 다시 작동할 수도 있습니다.
대화 상자에서 변경 내용을 적용할 수 없는 경우 항상 다시 빌드 옵션을 선택하면 현재 Visual Studio 세션에서 이 대화 상자가 다시 표시되지 않으며, Visual Studio에서 대화 상자를 표시하는 대신 자동으로 다시 빌드하고 다시 로드합니다.
문제 해결
핫 다시 로드 세션에 대한 자세한 진단 정보는 핫 다시 로드 출력 창을 확인하는 것이 좋습니다.
.NET Core에서 응답 압축을 사용하는 경우 응답 압축에 대한 정보를 참조하세요.