![](https://habrastorage.org/getpro/habr/upload_files/13d/b1e/760/13db1e760259bb01b5f75b25df54b4a9.png)
Сегодня мы с радостью представляем возможность «горячей перезагрузки» для .NET, которая уже доступна в Visual Studio 2019 16.11 (предварительная версия 1), а также в .NET 6 (предварительная версия 4) через инструмент командной строки dotnet watch. В этой статье мы расскажем, что такое горячая перезагрузка .NET, как приступить к ее использованию, как мы планируем развивать эту возможность в будущем, а также какие виды правок кода и языки поддерживаются на данный момент.
Что такое «горячая перезагрузка .NET»?
Горячая перезагрузка позволяет вносить изменения в исходный код приложения во время его выполнения без необходимости приостанавливать его вручную или создавать точку останова. Теперь прямо во время работы приложения можно внести в код изменение из числа тех, что поддерживаются для горячей перезагрузки, нажать кнопку «Применить изменения кода» в новом интерфейсе Visual Studio — и изменение будет сразу же применено.
![](https://habrastorage.org/getpro/habr/upload_files/528/ef4/318/528ef43182482446f47d825fc30afab8.gif)
Горячая перезагрузка работает со множеством старых и новых типов проектов, включая WPF, Windows Forms, предварительные версии .NET MAUI, проекты кода программной части приложений ASP.NET Core, проекты консольных приложений, WinUI 3 (требуется управляемый отладчик) и многие другие. В сущности, новая возможность работает с любыми проектами на базе среды выполнения .NET Framework или CoreCLR.
Мы стремились сделать горячую перезагрузку доступной независимо от того, как вы предпочитаете запускать свои приложения. Представленную сегодня версию можно использовать в отладчике Visual Studio, с которым она полностью интегрирована, а также через командную строку (dotnet watch
). В следующих выпусках появятся и другие варианты.
Начало работы
Чтобы приступить к работе, вам потребуется либо последний выпуск предварительной версии Visual Studio, либо .NET 6 (предварительная версия 4). Ниже описано, как это сделать.
Visual Studio
Использование горячей перезагрузки в Visual Studio при работе с отладчиком:
Скачайте и установите Visual Studio 2019 16.11 (предварительная версия 1).
Откройте проект поддерживаемого типа, например приложение WPF.
Запустите приложение с подключенным отладчиком клавишей F5 (удостоверьтесь, что параметр «Разрешить отладку машинного кода» в настройках/профиле запуска отладчика отключен).
Откройте файл с кодом на C#, который может многократно запускаться по действию из пользовательского интерфейса выполняемого приложения (код программной части кнопки, команда ViewModel и т. п.) или по таймеру через некий интервал. Внесите в код какое-нибудь изменение.
Примените изменения кода с помощью новой кнопки Применить изменения кода (ALT + F10) на панели инструментов Visual Studio (рядом с кнопкой Продолжить). Сохранять файлы при использовании Visual Studio не нужно — можно быстро внести в код изменение и двигаться дальше.
Если внесенное изменение поддерживается, обновленная логика будет применена к запущенному приложению, и вы увидите изменения в его работе при следующем выполнении обновленного кода (по действию или при выполнении активирующего условия, например по таймеру).
Прочие функции отладчика — точки останова, «Изменить и продолжить», «Горячая перезагрузка XAML» и др. — будут доступны, как и раньше. Все привычные возможности будут полноценно работать параллельно с горячей перезагрузкой .NET. Если у вас что-то не работает, сообщите нам об этом!
Интерфейс командной строки (CLI)
Использование горячей перезагрузки из командной строки при запуске приложения с помощью dotnet watch:
Установите .NET 6 (предварительная версия 4).
Измените имеющийся проект ASP.NET Core, указав в качестве целевой версии платформы .NET 6.
Добавьте свойство "
hotReloadProfile
": "aspnetcore
" в профиль запуска приложения (launchSettings.json
).
Пример файла Properties/launchSettings.json
:
{
"profiles": {
"dotnet": {
"commandName": "Project",
"hotReloadProfile": "aspnetcore"
}
}
}
Запустите проект с помощью команды
dotnet watch
и убедитесь, что в выводе указано, что горячая перезагрузка активирована.Внесите в управляемый исходный код приложения поддерживаемое изменение и сохраните файл, чтобы применить это изменение.
Как и в Visual Studio, с этого момента начнет применяться новая логика: при следующем выполнении обновленного кода вы увидите изменения в работе приложения.
Этот же подход можно использовать с проектами Blazor WebAssembly: следует изменить профиль горячей перезагрузки blazorwasm
и далее действовать, как описано выше. Можно попробовать его даже с Windows Forms и другими типами проектов на платформе CoreCLR: для этого вручную добавьте в папку Properties файл с именем launchSettings.json
и тем же содержимым, что в предыдущем примере.
Разработка новой возможности продолжается, и в будущем при использовании команды dotnet watch горячая перезагрузка будет работать для всех типов приложений .NET Core без файлов launchSettings.json
, но пока приходится мириться с таким ограничением.
Полноценный выпуск ожидается в Visual Studio 2022 и .NET 6
Сегодняшний выпуск — лишь предварительная, неполная версия нашей концепции горячей перезагрузки для разработчиков .NET. Хотя некоторые возможности доступны уже в ранних предварительных выпусках .NET 6 и Visual Studio 2019, в полной мере мы планируем реализовать этот функционал в .NET 6 (и последующих версиях .NET) и Visual Studio 2022. Это будет набор фреймворков и инструментов, обладающих максимально полными и оптимизированными возможностями.
Примеры ниже позволяют составить представление о том, какие возможности мы планируем реализовать в будущих предварительных выпусках и окончательной версии:
.NET Multi-platform App UI (.NET MAUI). .NET 6 (предварительная версия 4) позволит разработчикам, создающим приложения .NET MAUI, использовать горячую перезагрузку .NET с проектами для WinUI 3. В будущих выпусках мы добавим поддержку горячей перезагрузки .NET при разработке под iOS, Android и Mac Catalyst.
Страницы Razor. В будущих выпусках горячая перезагрузка и команда «Изменить и продолжить» будут поддерживаться при редактировании страниц Razor для веб-сайтов и приложений Blazor (если в качестве целевой платформы указана версия .NET 6 и выше).
Работа в Visual Studio без отладчика. В будущем выпуске Visual Studio 2022 мы планируем добавить поддержку горячей перезагрузки без отладчика. Это значит, что даже при запуске приложения сочетанием клавиш CTRL + F5 разработчики смогут вносить изменения в выполняемое приложение.
Расширение набора поддерживаемых изменений. Вместе с несколькими рабочими группами мы работаем над тем, чтобы в будущих выпусках Visual Studio 2022 и .NET 6+ сократить список правок кода, которые не поддерживаются во время выполнения.
Оптимизация фреймворков для работы с горячей перезагрузкой. В .NET 6 мы исследуем возможности оптимизации некоторых фреймворков для улучшения поддержки горячей перезагрузки. Такие улучшения планируются для ASP.NET Core, .NET MAUI и других фреймворков. За счет оптимизации разного рода горячая перезагрузка будет эффективнее работать в разных ситуациях.
Таковы планы на данный момент. Они не окончательные: мы будем прислушиваться к отзывам пользователей и ориентироваться на график выпусков.
Поддерживаемые и неподдерживаемые изменения и языки
Независимо от того, как вы используете горячую перезагрузку .NET, следует помнить, что некоторые изменения кода не поддерживаются во время выполнения приложения. В этих случаях будет выводиться диалоговое окно «Грубая редакция», предлагающее перезапустить приложение для применения изменений. Работа над новой возможностью продолжается, и подробное документирование поддерживаемых изменений еще не завершено. Пока что вы можете обратиться к существующему списку правок кода, которые поддерживаются функцией «Изменить и продолжить». Поскольку горячая перезагрузка работает на базе именно этой функции, это поможет лучше понять принцип ее работы. Подробные сведения: документация по функции «Изменить и продолжить».
Кроме того, хотя в примерах выше указан язык C#, в различных сценариях работы с отладчиком Visual Studio поддерживается и Visual Basic. F# в настоящее время не поддерживается в .NET 6, но мы планируем внедрить его поддержку в будущих выпусках, опираясь на отзывы пользователей.
Нам важны ваши отзывы
Конечно, в этой ранней предварительной версии будут ошибки. Иногда при попытке применить изменение ничего не будет происходить, иногда возможно аварийное завершение приложения и т. п. Если вы столкнетесь с какими-либо проблемами, сообщите нам о них — это не займет много времени. Ваша поддержка поможет нам эффективно устранить критические проблемы и определить приоритеты для дальнейшей работы.
Для направления отзывов используйте средства обратной связи Visual Studio.
Материал подготовлен в рамках курса "C# Developer. Professional". Если вас интересует развитие в C# разработке с нуля до Pro, предлагаем узнать про специализацию.
Также приглашаем всех желающих на открытый урок «Управление конфигурациями микросервисов». На занятии обсудим один из подходов, используемых в реальных high-load проектах.