Поделиться через


Написание и отладка выполняемого кода с помощью Горячая перезагрузка в Visual Studio (C#, Visual Basic, C++)

Горячая перезагрузка ранее назывался "Изменить и продолжить" в документации Visual Studio и некоторых устаревших текстах пользовательского интерфейса.

Начиная с Visual Studio 2022 г. интерфейс Горячая перезагрузка в Visual Studio работает как для управляемых .NET, так и для собственных приложений C++. Независимо от типа приложения, над которым вы работаете, цель Горячая перезагрузка заключается в том, чтобы сохранить максимальное количество перезапусков приложений между изменениями, что делает вас более продуктивным, уменьшая время, которое вы тратите на восстановление, перезапуск приложений и повторное переход к предыдущему расположению, где вы находились в самом приложении.

Мы повышаем производительность, позволяя изменять файлы кода приложения и немедленно применять изменения кода к работающему приложению, также известному как Горячая перезагрузка. После применения изменений повторно выполните код, выполнив действие в самом приложении (или через какой-либо таймер и т. д.) и сразу же увидите изменения; Не требуется приостановка работы приложения через точки останова!

Обновление выполняемого кода с помощью Горячая перезагрузка

  1. Откройте проект на основе поддерживаемого типа приложения. Приложения, поддерживаемые в .NET и C++.

  2. Запустите приложение с подключенным отладчиком с помощью F5 или , если поддерживается, CTRL+F5.

  3. Откройте файл кода и измените код.

  4. Примените изменения кода с помощью кнопки Горячая перезагрузкаScreenshot Горячая перезагрузка icon. или нажмите кнопку 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 версии 17.8 или более поздней версии 2022.

Тип приложения 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).

В следующих разделах мы предоставляем дополнительные сведения.

Поддержка приложений .NET Framework

При использовании Visual Studio 2022 и запуске приложения с отладчиком базовый интерфейс Горячая перезагрузка работает с большинством типов приложений и версий платформы .NET. Эта поддержка включает .NET Framework, .NET Core и .NET 5+ (для C# и Visual Basic как применимо). Ожидание в этом сценарии заключается в том, что если вы используете отладчик, предположим, что Горячая перезагрузка доступен вам и попробуйте!

Поддержка приложений C++

При использовании Visual Studio 2022 и запуске приложения с отладчиком вы можете выполнить горячую перезагрузку (hot reload) нативного приложения C++ при запуске в отладчике (F5) с помощью кнопки Горячая перезагрузка. Горячая перезагрузка также поддерживается для приложений, созданных с помощью проектов CMake и OpenFolder.

Для поддержки Горячая перезагрузка проекта необходимо задать следующие параметры:

  • Project > Свойства > C/C++ > General >Debug Information Format должно иметь значение Program Database for Edit and Continue /ZI
  • Project > Properties > Компоновщик > General >Enable Incremental Link должен иметь значение "Да /INCREMENTAL".

Для получения информации о поддерживаемых изменениях см. раздел Поддерживаемые изменения кода C++.

Visual Studio 2022 с приложением .NET или .NET Framework при использовании отладчика

При использовании Visual Studio 2022 и запуске приложения с отладчиком Горячая перезагрузка работает с большинством платформ приложений.

В любом месте, где есть .NET, и вы используете управляемый отладчик Visual Studio, вы должны получить базовую поддержку Горячая перезагрузка. Это означает, что даже проекты, такие как Функции Azure, работают отлично в этом сценарии.

Заметка

По умолчанию некоторые проекты используют отладку смешанного режима, которая не поддерживает Горячая перезагрузка. Этот параметр можно изменить в настройках проекта, задав Свойства > Проекта > Отладка > Открыть профили запуска отладки > значение false для включения отладки нативного кода.

Visual Studio 2022 с приложением .NET, но без использования отладчика

Горячая перезагрузка доступен без отладчика при выборе большинства типов приложений .NET 6 и более поздних версий.

Эта функция является эксклюзивной для .NET 6 и более поздних версий. Эти приложения, не предназначенные для .NET 6+ (то есть они предназначены для .NET 5 или ниже), не поддерживают сценарий "без отладчика" и должны использовать отладчик для получения доступа к функциям Горячая перезагрузка.

Кроме того, в настоящее время не все типы проектов поддерживают сценарий "без отладчика", см. Support для приложений .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 и присутствует в любом месте, где ранее была доступна функция Горячая перезагрузка. Более подробные инструкции см. в поддержке .NET Горячая перезагрузка для ASP.NET Core.

Для разработчиков ASP.NET Core, которые нацелены на .NET 6+, доступны дополнительные возможности, недоступные для более низких версий .NET. К этим возможностям относятся:

  • CSHTML: редактирование файла Razor CSHTML поддерживает множество типов изменений.
  • обновление браузера: редактирование Razor-файла автоматически вносит изменения в ваш веб-браузер при отладке. Эта функция была ранее доступна только при запуске приложения без отладчика.
  • CSS Горячая перезагрузка: Вы можете изменять CSS-файлы во время работы приложения, и изменения применяются немедленно к работающему приложению по мере ввода.
  • No Debugger: Вы получаете поддержку Горячая перезагрузка при использовании Visual Studio для запуска вашего веб-приложения без отладчика (CTRL-F5).

Поддерживаемые изменения .NET

Интерфейс .NET Горячая перезагрузка используется компилятором debugger и C# (Roslyn). Roslyn поддерживает изменения и Поддерживаемые изменения кода (C# и VB) перечислены типы поддерживаемых изменений и потенциальных будущих улучшений.

Поддерживаемые изменения .NET Framework

Интерфейс .NET Горячая перезагрузка используется компилятором debugger и C#. Поддерживаемые изменения кода (C# и VB) перечисляют типы изменений, поддерживаемых и потенциальных будущих улучшений.

Неподдерживаемые проекты .NET и .NET Framework

Горячая перезагрузка недоступны в некоторых конфигурациях проекта:

  • Если вы используете Visual Studio без отладчика, Горячая перезагрузка работает только для приложений .NET, предназначенных для .NET 6+.
  • Если вы используете отладчик Visual Studio для запуска приложения, но вы отключили Enable Горячая перезагрузка and Edit and Continue when debugging в параметрах, Горячая перезагрузка не поддерживается.
  • Конфигурации выпуска или пользовательской сборки не поддерживаются. Проект должен использовать конфигурацию сборки Debug.
  • Если вы нацелены на проект с использованием F# или .NET Native.
  • Некоторые оптимизации запуска или компиляции не поддерживаются в .NET Горячая перезагрузка. Например, если профиль отладки проекта настроен следующим образом, .NET Горячая перезагрузка не поддерживается:
    • Обрезка включена для вашего проекта. Например, он не поддерживается, если PublishTrimmed имеет значение True в файле проекта для профиля отладки.
    • ReadyToRun включён для вашего проекта. Например, он не поддерживается, если PublishReadyToRun имеет значение True в файле проекта для профиля отладки.

См. раздел «Неподдерживаемые сценарии» для получения дополнительных сведений.

Горячая перезагрузка не поддерживается для F#

Функция Горячая перезагрузка или "Изменить и продолжить" не поддерживается при отладке кода на F#. Изменения в коде F# возможны во время сеанса отладки, но их следует избежать. Изменения кода не применяются во время сеанса отладки. Поэтому любые изменения, внесенные в код F# во время отладки, приводят к исходному коду, который не соответствует отлаживаемому коду.

Настройка Горячая перезагрузка

Сведения о включении, отключении или настройке Горячая перезагрузка см. в разделе Configure Edit and Continue.

Предупреждение

Если появится следующее диалоговое окно, Горячая перезагрузка не удается применить текущие изменения без перезапуска. Вы можете перестроить приложение и применить изменения (перезапустить) или продолжить редактирование. Если вы выполните перестройку, всё состояние приложения будет потеряно. Если вы продолжите редактирование, возможно, что дополнительные изменения или исправления могут привести к тому, что функция Горячая перезагрузка снова заработает.

Снимок экрана: диалоговое окно

Снимок экрана: диалоговое окно

Если выбрать параметр Всегда перестраивать, если изменения не могут быть применены в диалоговом окне, то в текущем сеансе Visual Studio диалоговое окно больше не будет отображаться, и Visual Studio будет автоматически перестраивать и перезагружать проект вместо его отображения.

Устранение неполадок

Если Горячая перезагрузка не работает должным образом, проверьте следующее:

  • Убедитесь, что вы используете поддерживаемое приложение и сценарий. Некоторые типы проектов, отладка в смешанном режиме, оптимизированный код и Attach to Process сценарии не поддерживают Горячая перезагрузка. Дополнительные сведения см. в разделе "Неподдерживаемые сценарии".
  • Убедитесь, что приложение использует конфигурацию Debug и что Горячая перезагрузка включен в Tools>Options>Debugging>.NET/C++ Горячая перезагрузка.
  • Установите Logging Verbosity в Detailed или Diagnostic, чтобы получить больше информации в выходных данных Горячая перезагрузка.
  • Откройте окно Output и в разделе Показать вывод из выберите Горячая перезагрузка для просмотра диагностических сообщений.
  • Если строка отображается только для чтения во время отладки, это может быть активная инструкция в стеке вызовов или изменение может потребовать перезагрузки.

Список распространенной диагностики см. в разделе «Горячая перезагрузка» и «Edit and Continue»: сообщения об ошибках. Если проблема сохраняется и выходные данные не отображают четкой причины, используйте Report a Problem для отправки отзывов команде Visual Studio.

Если вы используете сжатие ответов в .NET Core, см. сведения о сжатии ответов.