Написание и отладка выполняемого кода с помощью горячей перезагрузки в 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 или ниже), не поддерживают сценарий "без отладчика" и должны использовать отладчик для получения поддержки горячей перезагрузки.
- При использовании Visual Studio 2022 с приложением .NET 6+ большинство сценариев поддерживаются. Эта поддержка не ограничивается новой функцией "без отладчика", упоминаемой ранее. Она также включает другие новые возможности, такие как поддержка горячей перезагрузки проектов Blazor и, в целом, возможности редактирования файлов Razor в любых приложениях ASP.NET Core, а также горячая перезагрузка CSS. Использование Visual Studio 2022 вместе с приложениями для .NET 6 обеспечивает самый мощный опыт горячей перезагрузки.
В следующей таблице показана минимальная версия .NET, необходимая для поддержки горячей перезагрузки .NET с подключенным отладчиком (F5) и без подключенного отладчика (CTRL+F5) на основе типа проекта. Требуется Visual Studio 2022 версии 17.8 или более поздней версии.
Тип приложения | 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 | .NET 6 | .NET 6 | .NET 6 |
Blazor WebAssembly | .NET 6 | .NET 6 | .NET 6 |
МАУИ (WinUI/Android/iOS) |
.NET 6 | -- | -- |
типы изменений, которые можно сделать с горячей перезагрузкой, определяются версией среды выполнения и компилятора, а не методом, используемым для запуска приложения (F5 или CTRL+F5).
В следующих разделах мы предоставляем дополнительные сведения.
Поддержка приложений C++
При использовании Visual Studio 2022 и запуске собственного приложения C++ с отладчиком можно выполнить горячую перезагрузку нативного приложения C++ при работе в отладчике (F5) с помощью кнопки горячей перезагрузки. Горячая перезагрузка также поддерживается для приложений, созданных с помощью проектов CMake и OpenFolder.
Для поддержки горячей перезагрузки проекта необходимо задать следующие параметры:
- Свойства > проекта > C/C++ > общего формата >отладочной информации должны иметь значение "База данных программы для изменения и продолжения
/ZI
". - Свойства > проекта > компоновщика > общие >включить добавочную компоновку необходимо задать значение "Да
/INCREMENTAL
".
Для получения информации о поддерживаемых изменениях см. раздел Поддерживаемые изменения кода C++.
Visual Studio 2022 с приложением .NET при использовании отладчика
При использовании Visual Studio 2022 и запуске приложения с отладчиком горячая перезагрузка работает с большинством платформ приложений.
В любом месте, где у вас есть .NET, и вы используете управляемый отладчик Visual Studio, вы должны получить базовую поддержку горячей перезагрузки. Это означает, что даже проекты, такие как Функции Azure, работают отлично в этом сценарии.
Заметка
По умолчанию некоторые проекты используют отладку в смешанном режиме, которая не поддерживает горячую перезагрузку. Этот параметр можно изменить в параметрах проекта, задав Свойства проекта >> Отладка > Открыть профили запуска отладки > Установите значение false для опции Включение отладки машинного кода.
Visual Studio 2022 с приложением .NET, но без использования отладчика
Горячая перезагрузка доступна без отладчика при выборе большинства типов приложений .NET 6+.
Эта функция является эксклюзивной для .NET 6+. Эти приложения, не предназначенные для .NET 6+ (то есть они предназначены для .NET 5 или ниже), не поддерживают сценарий "без отладчика" и должны использовать отладчик для получения доступа к функциям горячей перезагрузки.
Кроме того, в настоящее время не все типы проектов поддерживают сценарий "без отладчика", см. поддержка приложений .NET.
Visual Studio 2022 с приложением .NET 6+
Если вы используете Visual Studio 2022 и работаете над приложениями, предназначенными для .NET 6+, вы получите преимущества наиболее доработанной и функциональной функции горячей перезагрузки.
Поддерживается в этом сценарии:
- Приложения Blazor (на сервере и WebAssembly)
- Редактирование файлов Razor в Blazor и обычных веб-сайтах ASP.NET Core
- Горячая перезагрузка CSS
- Горячая перезагрузка XAML
- Поддержка горячей перезагрузки при запуске приложений без отладчика (как описано ранее более подробно)
Если вы нацелены на .NET 6+, вы продолжаете получать улучшения в предстоящих обновлениях Visual Studio 2022, а также в пакетах функций и основных релизах .NET.
Поддерживаемые сценарии ASP.NET Core
Базовый интерфейс горячей перезагрузки поддерживается для многих сценариев ASP.NET. Наиболее широкодоступная функция — это возможность изменять код и файлы других классов .NET для большинства типов веб-приложений. Эта функция работает при использовании отладчика Visual Studio и доступна везде, где ранее была доступна функция Hot Reload. Дополнительные рекомендации см. в разделе о поддержке функции горячей перезагрузки .NET для ASP.NET Core.
Для разработчиков ASP.NET Core, предназначенных для .NET 6+, существуют дополнительные возможности, недоступные для более низких версий .NET. К этим возможностям относятся:
- CSHTML: редактирование файла Razor CSHTML поддерживает множество типов изменений.
- обновление браузера: редактирование Razor-файла автоматически вносит изменения в ваш веб-браузер при отладке. Эта функция была ранее доступна только при запуске приложения без отладчика.
- Горячая перезагрузка CSS: в процессе работы приложения можно изменить файлы CSS, и изменения применяются к работающему приложению немедленно по мере ввода.
- Нет отладчика: Вы получаете поддержку Hot Reload при использовании Visual Studio для запуска веб-приложения без отладчика (CTRL-F5).
Поддерживаемые изменения .NET
Возможность горячей перезагрузки .NET поддерживается отладчиком и компилятором C# (Roslyn). Roslyn поддерживает изменения и Поддерживаемые изменения кода (C# и VB) перечислены типы поддерживаемых изменений и потенциальных будущих улучшений.
Неподдерживаемые проекты .NET
Горячая перезагрузка недоступна в некоторых конфигурациях проекта:
- Если вы используете Visual Studio без отладчика, горячая перезагрузка работает только для приложений .NET, предназначенных для .NET 6+.
- Если вы используете отладчик Visual Studio для запуска приложения, но вы отключили
Enable Hot Reload and Edit and Continue when debugging
в параметрах, горячая перезагрузка не поддерживается. - Конфигурации выпуска или пользовательской сборки не поддерживаются. Проект должен использовать конфигурацию сборки
Debug
. - Если вы нацелены на проект F# или .NET Native.
- Некоторые оптимизации запуска или компиляции не поддерживаются в горячей перезагрузке .NET. Например, если профиль отладки проекта настроен следующим образом, горячая перезагрузка .NET не поддерживается:
-
Обрезка включена для вашего проекта. Например, он не поддерживается, если
PublishTrimmed
имеет значение True в файле проекта для профиля отладки. -
ReadyToRun включён для вашего проекта. Например, он не поддерживается, если
PublishReadyToRun
имеет значение True в файле проекта для профиля отладки.
-
Обрезка включена для вашего проекта. Например, он не поддерживается, если
См. раздел «Неподдерживаемые сценарии» для получения дополнительных сведений.
Горячая перезагрузка не поддерживается для F#
Горячая перезагрузка или Изменение и продолжение не поддерживаются при отладке кода F#. Изменения в коде F# возможны во время сеанса отладки, но их следует избежать. Изменения кода не применяются во время сеанса отладки. Поэтому любые изменения, внесенные в код F# во время отладки, приводят к исходному коду, который не соответствует отлаживаемому коду.
Настройка горячей перезагрузки
См. информацию о том, как включить, отключить или настроить "горячую перезагрузку", в разделе Настройка функции "Правка и продолжение".
Предупреждение
Если появится следующее диалоговое окно, горячая перезагрузка не может применить текущие изменения без перезапуска. Вы можете перестроить приложение и применить изменения (перезапустить) или продолжить редактирование. Если вы выполните перестройку, всё состояние приложения будет потеряно. Если вы продолжите редактирование, то возможно, что дополнительные изменения или исправления могут привести к тому, что функция горячей перезагрузки снова заработает.
Если вы выберете параметр Всегда перестраивать, если изменения не могут быть применены в диалоговом окне, это диалоговое окно больше не будет отображаться в текущем сеансе Visual Studio, и Visual Studio автоматически выполнит перестроение и перезагрузку вместо его показа.
Устранение неполадок
Настоятельно рекомендуется проверить наличие окна горячей перезагрузки для получения подробных диагностических сведений о сеансе горячей перезагрузки.
Если вы используете сжатие ответов в .NET Core, ознакомьтесь с информацией о сжатия ответов.