Поддерживаемые изменения кода (C# и Visual Basic)
Механизм горячей перезагрузки, ранее называвшийся "Редактировать и продолжить", обрабатывает большинство типов изменений кода внутри тел методов. Большинство изменений вне тел методов и некоторые изменения в самих телах методов, однако, не могут применяться во время отладки. Чтобы применить неподдерживаемые изменения, необходимо остановить отладку и перезапустить с помощью новой версии кода.
Механизм "Изменить и продолжить" обрабатывает большинство типов изменений кода внутри тел методов. Большинство изменений вне тел методов и некоторые изменения в самих телах методов, однако, не могут применяться во время отладки. Чтобы применить неподдерживаемые изменения, необходимо остановить отладку и перезапустить с помощью новой версии кода.
Поддерживаемые изменения в коде
В следующей таблице показаны изменения, которые могут быть внесены в код C# и Visual Basic во время сеанса отладки без перезапуска сеанса.
Элемент языка или компонент | Поддерживаемая операция редактирования | Ограничения |
---|---|---|
Типы | Добавление методов, полей, конструкторов и т. д. | Да |
Итераторы | Добавление или изменение | Нет |
асинхронные выражения async/await | Добавление или изменение | Да |
Динамические объекты | Добавление или изменение | Нет |
лямбда-выражения | Добавление или изменение | Да |
Выражения LINQ | Добавление или изменение | То же, что и лямбда-выражения |
Обобщения | Добавление или изменение | Да |
Элемент языка или компонент | Поддерживаемая операция редактирования | Ограничения |
---|---|---|
Типы | Добавление методов, полей, конструкторов и т. д. | Да |
Итераторы | Добавление или изменение | Нет |
асинхронные выражения async/await | Добавление или изменение | Да |
Динамические объекты | Добавление или изменение | Нет |
лямбда-выражения | Добавление или изменение | Да |
Выражения LINQ | Добавление или изменение | То же, что и лямбда-выражения |
Заметка
Более новые языковые функции, такие как интерполяция строк и операторы условного доступа с значением NULL, обычно поддерживаются функцией Edit and Continue. Актуальную информацию см. на странице Enc Supported Edits. Для .NET Framework поддерживаемые функции являются подмножеством перечисленных компонентов и зависят от версии компилятора.
Улучшения .NET 6+
Улучшения в .NET 6 и Visual Studio 2022 и более поздних версиях включают поддержку дополнительных типов изменений, которые выходят за рамки того, что изначально возможно в более ранних версиях Visual Studio. Эти улучшения доступны как для горячей перезагрузки, так и для возможностей редактирования и продолжения.
Возможность Горячей перезагрузки .NET 6+ обеспечивается с помощью механизма редактирования и продолжения и Roslyn. Поддерживаемые изменения перечислены перечень типов изменений, поддерживаемых в настоящее время Roslyn и потенциальные улучшения в будущем.
Неподдерживаемые изменения кода
Следующие изменения нельзя применить к коду C# и Visual Basic во время сеанса отладки.
Изменения текущей инструкции или любой другой активной инструкции.
Активная инструкция — это любая инструкция в функции в стеке вызовов, которая была вызвана для получения текущей инструкции.
Текущая инструкция отображается на желтом фоне в окне источника. Другие активные инструкции отображаются на затенированном фоне, а также предназначены только для чтения. Эти цвета по умолчанию можно изменить в диалоговом окне Параметры.
Любые неподдерживаемые изменения кода по элементу языка, как описано в следующей таблице.
Информацию о поддерживаемых и неподдерживаемых типах изменений для .NET 6+ и Visual Studio 2022 см. в разделе "Поддерживаемые изменения" и.
Небезопасный код
Изменения в небезопасном коде имеют те же ограничения, что и изменения в безопасном коде, с одним дополнительным ограничением: Изменение и продолжение не поддерживает изменения в небезопасном коде, выходя из метода, содержащего оператор stackalloc
.
Поддержка приложений
К поддерживаемым приложениям относятся:
- Приложения UWP в Windows 10 или Windows 11
- приложения x86 и x64, предназначенные для настольной версии .NET Framework 4.6 или более поздних версий (.NET Framework — это только настольная версия)
Для .NET 6 и более поздних версий редактирование поддерживается для следующих типов файлов:
- .cshtml
- .razor
Неподдерживаемые приложения, платформы и операции
Неподдерживаемые приложения или платформы включают:
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS и Android)
Для ASP.NET и ASP.NET Core редактирование не поддерживается для следующих типов файлов:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Неподдерживаемые сценарии
Изменение и продолжение недоступно в следующих сценариях отладки:
Отладка в смешанном режиме (собственный или управляемый).
Отладка в Arm64 без назначения .NET 7 или более поздней версии.
Отладка с помощью набора переменных среды COR_ENABLE_PROFILING.
Отладка приложения с помощью подключения к процессу (отладка > присоединение к процессу) вместо запуска приложения путем выбора запуска в меню отладки. Если вы хотите использовать функцию "Редактировать и продолжить" при присоединении к процессу, перед запуском процесса необходимо задать переменную окружения COMPLUS_ForceENC (
set COMPLUS_ForceENC=1
).Отладка недетерминированных версий сборки (например, основанных на времени). Если вы хотите использовать Edit and Continue, попробуйте задать версию только в сборках Релиз (или CI) и сохранить версию в отладочных сборках постоянной.
Отладка оптимизированного кода.
Отладка SQL.
Отладка файла дампа.
Отладка внедренного приложения среды выполнения.
Отладка старой версии кода после сбоя сборки новой версии из-за ошибок сборки.
Связанное содержимое
- "Редактировать и продолжать" (Visual C#)
- Как использовать: Правка и Продолжение (C#)
- Настройка функции "Правка и продолжение"