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

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

Это достигается за счет того, что вы можете изменить файлы кода приложения и немедленно применить изменения к выполняющемуся приложению, что также известно как Горячая перезагрузка. После применения изменений вы повторно исполняете код, выполнив действие в самом приложении (или с помощью определенного таймера и т. п.), а затем немедленно просматриваете изменения. При этом не нужно приостанавливать приложение с помощью точек останова.

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

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

  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 или ниже), не поддерживают сценарий "без отладчика" и должны использовать отладчик для получения поддержки Горячая перезагрузка.
  • При использовании Visual Studio 2022 с приложением .NET 6 большинство сценариев поддерживаются. Это не ограничивается новой функцией "без отладчика" упоминание выше. Также поддерживаются другие новые возможности, такие как горячая перезагрузка проектов Blazor и, в более общем плане, изменение файлов Razor в любых приложениях ASP.NET Core и горячая перезагрузка CSS. Использование Visual Studio 2022 и приложений, предназначенных для .NET 6 вместе, даст вам самый мощный Горячая перезагрузка интерфейс.

В следующей таблице показано, какие проекты поддерживают .NET Горячая перезагрузка с подключенным отладчиком (F5) и без отладчика (CTRL+F5), в соответствии с минимальной версией .NET, необходимой для поддержки в 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 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 и запуске приложения с помощью отладчика можно выполнить горячую перезагрузку собственного приложения C++ при запуске в отладчике (F5) с помощью кнопки Горячая перезагрузка. Горячая перезагрузка также поддерживается для приложений, созданных с помощью проектов CMake и OpenFolder.

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

  • Для общего формата сведений об отладке свойств > проекта > C/C++ >>должно быть задано значение Program Database for Edit and Continue (База данных программы для изменения и продолжения/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 и присутствует в любом месте Горячая перезагрузка ранее. Более подробное руководство: Поддержка Горячей перезагрузки .NET для ASP.NET Core.

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

  • CSHTML. Редактирование файла Razor CSHTML поддерживает много типов изменений.
  • Обновление браузера. Редактирование файла Razor автоматически обновляет изменения в веб-браузере при отладке. Ранее эта функция была доступна только при запуске приложения без отладчика.
  • Горячая перезагрузка CSS. Теперь можно изменять CSS-файлы во время работы приложения, и изменения будут применяться к выполняющемуся приложению по мере ввода.
  • Без отладчика. Вы получаете поддержку Горячей перезагрузки при использовании 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.

Дополнительные сведения см . в неподдерживаемых сценариях .

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

Сведения о включении, отключении или настройке Горячая перезагрузка см. в разделе "Настройка правки и продолжения".

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

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

Screenshot of the apply changes dialog box

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

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

Настоятельно рекомендуется проверка для окна вывода Горячая перезагрузка подробные диагностические сведения о сеансе Горячая перезагрузка.

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