Cambios de código admitidos (C# y Visual Basic)
El mecanismo Recarga activa, anteriormente denominado Editar y continuar, controla la mayoría de los tipos de cambios de código dentro de los cuerpos del método. Ahora bien, durante la depuración, no es posible efectuar la mayoría de cambios fuera de los cuerpos de método y algunos cambios dentro de estos. 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. Ahora bien, durante la depuración, no es posible efectuar la mayoría de cambios fuera de los cuerpos de método y algunos cambios dentro de estos. Para efectuar dichos cambios no compatibles, es necesario detener la depuración y reiniciar con una versión nueva del código.
Cambios admitidos 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.
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.
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 una vez que ya se ha 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 contenga una cláusula de consulta de LINQ Aggregate, Group By, Simple Join o Group JoinMé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) Elemento de lenguaje o característica Operación de edición no admitida Todos los elementos de código Cambio de 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 una vez que ya se ha 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 contenga una cláusula de consulta de LINQ Aggregate, Group By, Simple Join o Group JoinMé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 el .NET Framework 4 y versiones anteriores (consulte 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 admitidos
La opción Editar y continuar no se encuentra disponible en los siguientes escenarios de depuración:
Depuración en modo mixto (nativa o administrada).
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.
Depurar una versión anterior del código cuando no ha sido posible generar una nueva versión debido a errores de compilación.