Cambios de código admitidos (C# y Visual Basic)
El mecanismo Hot Reload, anteriormente denominado Editar y continuar, controla la mayoría de los tipos de cambios de código dentro de los métodos. Sin embargo, la mayoría de los cambios fuera de los cuerpos del método y algunos cambios dentro de los cuerpos del método no se pueden aplicar durante la depuración. Para aplicar esos cambios no admitidos, debes parar la depuración y reiniciar con una nueva versión del código.
El mecanismo Editar y continuar controla la mayoría de los tipos de cambios de código dentro de los cuerpos del método. Sin embargo, la mayoría de los cambios fuera de los cuerpos del método y algunos cambios dentro de los cuerpos del método no se pueden aplicar durante la depuración. Para aplicar esos cambios no admitidos, debes parar la depuración y reiniciar con una nueva versión del código.
Cambios soportados en el código
En la tabla siguiente se muestran los cambios que se pueden realizar en código de C# y Visual Basic durante una sesión de depuración sin reiniciar la sesión.
Elemento de lenguaje o característica | Operación de edición admitida | Limitaciones |
---|---|---|
Tipos | Agregar métodos, campos, constructores y mucho más | sí |
Iteradores | Agregar o modificar | No |
Expresiones async/await | Agregar o modificar | sí |
Objetos dinámicos | Agregar o modificar | No |
expresiones lambda | Agregar o modificar | sí |
Expresiones LINQ | Agregar o modificar | igual que las expresiones lambda |
Genéricos | Agregar o modificar | sí |
Elemento de lenguaje o característica | Operación de edición admitida | Limitaciones |
---|---|---|
Tipos | Agregar métodos, campos, constructores y mucho más | sí |
Iteradores | Agregar o modificar | No |
Expresiones async/await | Agregar o modificar | sí |
Objetos dinámicos | Agregar o modificar | No |
expresiones lambda | Agregar o modificar | sí |
Expresiones LINQ | Agregar o modificar | igual que las expresiones lambda |
Nota
Las características de lenguaje más recientes, como la interpolación de cadenas y los operadores condicionales NULL, suelen ser compatibles con Edit y Continue. Para obtener la información más reciente, consulte la página Ediciones admitidas en Editar y continuar. Para .NET Framework, las características admitidas son un subconjunto de las características enumeradas y dependen de la versión del compilador.
Mejoras de .NET 6+
Las mejoras en .NET 6+ y Visual Studio 2022 y versiones posteriores incluyen compatibilidad con más tipos de ediciones que van más allá de lo que era posible originalmente en versiones anteriores de Visual Studio. Estas mejoras están disponibles tanto para Hot Reload como para las experiencias de Editar y Continuar.
La experiencia de Recarga activa de .NET 6+ cuenta con la tecnología del mecanismo Editar y continuar y Roslyn. En Ediciones admitidas se enumeran los tipos de ediciones compatibles actualmente con Roslyn y posibles mejoras futuras.
Cambios no admitidos en el código
Los cambios siguientes no se pueden aplicar al código de C# y Visual Basic durante una sesión de depuración.
Cambios en la instrucción actual o en cualquier otra instrucción activa.
Una instrucción activa es cualquier instrucción de una función presente en la pila de llamadas que se utilizó para llegar a la instrucción actual.
La declaración actual aparece sobre un fondo amarillo en la ventana de origen. Otras declaraciones activas aparecen en un fondo sombreado y son de solo lectura. En el cuadro de diálogo Opciones de , se pueden cambiar estos colores predeterminados.
Los cambios no admitidos en el código por elemento de lenguaje, como se describe en la tabla siguiente.
Para .NET 6+ y Visual Studio 2022, consulte ediciones compatibles para ver los tipos de ediciones actualmente compatibles y no compatibles.
Elemento de lenguaje o característica Operación de edición no admitida Todos los elementos de código Cambiar nombre Espacios de nombres Agregar Espacios de nombres, tipos, miembros Eliminar Interfaces Modificar Tipos Agregar miembro abstracto o virtual, agregar invalidación (vea los detalles) Tipos Agregar destructor Miembros - Modificar un miembro que hace referencia a un tipo de interoperabilidad incrustado
- Modificar un miembro estático después de que ya se haya accedido mediante la ejecución de códigoMiembros (Visual Basic) - Modificar un miembro con la instrucción Al ocurrir un error o Reanudar
- Modificar un miembro que contiene una cláusula de consulta De agregado, Group By, Simple Join o Group Join LINQMétodos - Modificar firmas
- Convertir un método abstracto en noabstract agregando un cuerpo del método
- Eliminar cuerpo del métodoAtributos Agregar o modificar Eventos o propiedades Modificar un parámetro de tipo, un tipo base, un tipo delegado o un tipo de valor devuelto Operadores o indexadores Modificar un parámetro de tipo, un tipo base, un tipo delegado o un tipo de valor devuelto bloques catch Modificar cuando contiene una instrucción activa Bloques try-catch-finally Modificar cuando contiene una instrucción activa Using (instrucciones) Agregar métodos asincrónicos/lambdas Modificar un método asincrónico o lambda en un proyecto destinado a .NET Framework 4 y versiones inferiores (consulte detalles) Iteradores Modificar un iterador en un proyecto destinado a .NET Framework 4 y versiones anteriores (vea los detalles) Elemento de lenguaje o característica Operación de edición no admitida Todos los elementos de código Cambiar nombre Espacios de nombres Agregar Espacios de nombres, tipos, miembros Eliminar Genéricos Agregar o modificar Interfaces Modificar Tipos Agregar miembro abstracto o virtual, agregar invalidación (vea los detalles) Tipos Agregar destructor Miembros - Modificar un miembro que hace referencia a un tipo de interoperabilidad incrustado
- Modificar un miembro estático después de que ya se haya accedido mediante la ejecución de códigoMiembros (Visual Basic) - Modificar un miembro con la instrucción Al ocurrir un error o Reanudar
- Modificar un miembro que contiene una cláusula de consulta De agregado, Group By, Simple Join o Group Join LINQMétodos - Modificar firmas
- Convertir un método abstracto en noabstract agregando un cuerpo del método
- Eliminar cuerpo del métodoAtributos Agregar o modificar Eventos o propiedades Modificar un parámetro de tipo, un tipo base, un tipo delegado o un tipo de valor devuelto Operadores o indexadores Modificar un parámetro de tipo, un tipo base, un tipo delegado o un tipo de valor devuelto bloques catch Modificar cuando contiene una instrucción activa Bloques try-catch-finally Modificar cuando contiene una instrucción activa Using (instrucciones) Agregar Expresiones lambda/métodos asincrónicos Modificar un método asincrónico o lambda en un proyecto destinado a .NET Framework 4 y versiones inferiores (consulte detalles) Iteradores Modificar un iterador en un proyecto destinado a .NET Framework 4 y versiones anteriores (vea los detalles)
Código no seguro
Los cambios en el código no seguro tienen las mismas limitaciones que los cambios en el código seguro, con una restricción adicional: Editar y continuar no admite cambios en el código no seguro que sale dentro de un método que contiene el operador stackalloc
.
Compatibilidad con aplicaciones
Entre las aplicaciones admitidas se incluyen:
- Aplicaciones para UWP en Windows 10 o Windows 11
- Aplicaciones x86 y x64 destinadas al escritorio de .NET Framework 4.6 o versiones posteriores (.NET Framework es solo una versión de escritorio)
Para .NET 6 y versiones posteriores, se admite la edición para los siguientes tipos de archivo:
- .cshtml
- .razor
Aplicaciones, plataformas y operaciones no compatibles
Las aplicaciones o plataformas no admitidas incluyen:
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS y Android)
Para ASP.NET y ASP.NET Core, la edición no se admite para los siguientes tipos de archivo:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Escenarios no compatibles
La opción Editar y continuar no se encuentra disponible en los siguientes escenarios de depuración:
Depuración en modo mixto (nativo o administrado).
Depuración en Arm64 sin tener como destino .NET 7 o posterior.
Depuración con la variable de entorno COR_ENABLE_PROFILING establecida.
Depuración de una aplicación mediante la asociación al proceso (Depurar > Asociar al proceso) en lugar de ejecutar la aplicación al elegir Inicio en el menú Depurar. Si desea usar Editar y continuar al adjuntar a un proceso, la variable de entorno COMPLUS_ForceENC debe establecerse antes de iniciar el proceso (
set COMPLUS_ForceENC=1
).Depuración con versiones de ensamblado no deterministas (por ejemplo, basadas en tiempo). Si desea usar Editar y continuar, considere la posibilidad de establecer la versión solo en compilaciones de versión (o CI) y mantener la versión en las compilaciones de depuración constante.
Depuración de código optimizado.
Depuración de SQL.
Depurar un archivo de volcado de memoria.
Depuración de una aplicación incrustada en tiempo de ejecución.
La depuración de una versión anterior del código después de que no se pudo compilar una nueva versión debido a errores de compilación.