[Перевод] Горячая перезагрузка .NET: новая возможность для редактирования кода во время выполнения приложений

image-loader.svg

Сегодня мы с радостью представляем возможность «горячей перезагрузки» для .NET, которая уже доступна в Visual Studio 2019 16.11 (предварительная версия 1), а также в .NET 6 (предварительная версия 4) через инструмент командной строки dotnet watch. В этой статье мы расскажем, что такое горячая перезагрузка .NET, как приступить к ее использованию, как мы планируем развивать эту возможность в будущем, а также какие виды правок кода и языки поддерживаются на данный момент.

Что такое «горячая перезагрузка .NET»?

Горячая перезагрузка позволяет вносить изменения в исходный код приложения во время его выполнения без необходимости приостанавливать его вручную или создавать точку останова. Теперь прямо во время работы приложения можно внести в код изменение из числа тех, что поддерживаются для горячей перезагрузки, нажать кнопку «Применить изменения кода» в новом интерфейсе Visual Studio — и изменение будет сразу же применено.

image-loader.svg

Горячая перезагрузка работает со множеством старых и новых типов проектов, включая 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 проектах.

© Habrahabr.ru