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 efectuar dichos cambios no compatibles, es necesario detener la depuración y reiniciar con una versión nueva del código.

El mecanismo Editar y continuar controla la mayoría de los tipos de cambios de código dentro de los cuerpos de 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 el código de C# y Visual Basic durante una sesión de depuración sin reiniciar la sesión.

Elemento o característica de lenguaje Operación de edición admitida Limitaciones
Tipos Agregar métodos, campos, constructores y mucho más
Iterators Agregar o modificar No
Expresiones async/await Agregar o modificar
Objetos dinámicos Agregar o modificar No
expresiones lambda Agregar o modificar
Expresiones LINQ Agregar o modificar Igual que las expresiones lambda
Genéricos Agregar o modificar
Elemento o característica de lenguaje Operación de edición admitida Limitaciones
Tipos Agregar métodos, campos, constructores y mucho más
Iterators Agregar o modificar No
Expresiones async/await Agregar o modificar
Objetos dinámicos Agregar o modificar No
expresiones lambda Agregar o modificar
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, se admiten generalmente mediante Editar y continuar. 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 para las experiencias de Recarga activa y 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 siguientes cambios 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, en funciones de la pila de llamadas, que haya sido llamada para llegar a la instrucción actual.

    Un fondo amarillo marca la instrucción actual en la ventana de origen. Un fondo sombreado marca otras instrucciones activas; son de solo lectura. Estos colores predeterminados se pueden cambiar en el cuadro de diálogo Opciones.

  • En la tabla siguiente se muestran los cambios no admitidos en el código mediante el elemento de lenguaje.

    Elemento o característica de lenguaje 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ódigo
    Miembros (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 Join
    Métodos - Modificar firmas
    - Convertir un método abstracto en no abstracto agregando un cuerpo del método
    - Eliminar cuerpo del método
    Atributos Agregar o modificar
    Eventos o propiedades Modificar un parámetro de tipo, tipo base, tipo de delegado o tipo de valor devuelto
    Operadores o indizadores Modificar un parámetro de tipo, tipo base, tipo de delegado o 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 una expresión lambda o un método asincrónico en un proyecto destinado a .NET Framework 4 y versiones anteriores (vea los detalles)
    Iterators Modificar un iterador en un proyecto destinado a .NET Framework 4 y versiones anteriores (vea los detalles)
    Elemento o característica de lenguaje 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 una vez que ya se ha accedido mediante la ejecución de código
    Miembros (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 Join
    Métodos - Modificar firmas
    - Convertir un método abstracto en no abstracto agregando un cuerpo del método
    - Eliminar cuerpo del método
    Atributos Agregar o modificar
    Eventos o propiedades Modificar un parámetro de tipo, tipo base, tipo de delegado o tipo de valor devuelto
    Operadores o indizadores Modificar un parámetro de tipo, tipo base, tipo de delegado o 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 una expresión lambda o un método asincrónico en un proyecto destinado a .NET Framework 4 y versiones anteriores (vea los detalles)
    Iterators Modificar un iterador en un proyecto destinado a .NET Framework 4 y versiones anteriores (vea los detalles)

Código no seguro

Los cambios efectuados en el código no seguro tienen las mismas limitaciones que los cambios efectuados en el código seguro, con una restricción adicional: Editar y continuar no admite cambios en el código no seguro que esté dentro de un método que contenga el operador stackalloc.

Compatibilidad con la aplicación

Entre las aplicaciones admitidas se incluyen:

  • Aplicaciones para UWP en Windows 10 o Windows 11
  • Aplicaciones x86 y x64 que tienen como destino el escritorio de .NET Framework 4.6 o versiones posteriores (.NET Framework es solo una versión de escritorio)

En .NET 6 y versiones posteriores, se pueden editar 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)

En ASP.NET y ASP.NET Core, no se pueden editar 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.