Создание и отладка выполняющегося кода с помощью Горячей перезагрузки в 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 Горячая перезагрузка с подключенным отладчиком (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.
- Для проекта включена обрезка. Например, если в файле проекта для профиля отладки для параметра
Дополнительные сведения см . в неподдерживаемых сценариях .
Настройка Горячей перезагрузки
Сведения о включении, отключении или настройке Горячая перезагрузка см. в разделе "Настройка правки и продолжения".
Предупреждение
Если появится следующее диалоговое окно, то Горячей перезагрузке не удалось применить текущие изменения без перезапуска. Вы можете либо перестроить приложение и применить изменения (перезапустить приложение), либо продолжить редактирование. При перестроении состояние приложения теряется. При продолжении редактирования возможно, что дополнительные изменения или исправления могут привести к тому, что Горячая перезагрузка снова работать.
Если в диалоговом окне выбран параметр "Всегда перестроение", если изменения не могут быть применены , диалоговое окно снова не отображается в текущем сеансе Visual Studio, а Visual Studio автоматически перестроит и перезагрузит вместо отображения диалогового окна.
Устранение неполадок
Настоятельно рекомендуется проверка для окна вывода Горячая перезагрузка подробные диагностические сведения о сеансе Горячая перезагрузка.
Если вы используете сжатие ответов в .NET Core, ознакомьтесь с сведениями об сжатиях ответов.