Escritura y depuración de código en ejecución con Recarga activa en Visual Studio (C#, Visual Basic, C++)

A partir de Visual Studio 2022, la experiencia de Recarga activa en Visual Studio funciona tanto para las aplicaciones .NET administradas como para las aplicaciones nativas de C++. Independientemente del tipo de aplicación en la que esté trabajando, la intención de Recarga activa es ahorrar tantos reinicios de la aplicación entre ediciones como sea posible, lo que le hace más productivo al reducir el tiempo que dedica a esperar a que las aplicaciones se recompilen, reinicien, vuelvan a desplazarse a la ubicación anterior donde estaba en la propia aplicación, etc.

Esto se logra al hacer posible la edición de los archivos de código de la aplicación y aplicar los cambios de código inmediatamente a la aplicación en ejecución, también conocida como Recarga activa. Una vez aplicados los cambios, vuelva a ejecutar el código mediante una acción en la propia aplicación (o a través de algún tipo de temporizador, por ejemplo) y vea los cambios inmediatamente. No es necesario pausar la aplicación a través de puntos de interrupción.

Actualización del código en ejecución con Recarga activa

  1. Abra un proyecto basado en un tipo de aplicación compatible. Consulte las aplicaciones compatibles con .NET y C++.

  2. Inicie la aplicación con el depurador asociado mediante F5 o, si se admite, Ctrl+F5.

  3. Abra un archivo de código y cambie el código.

  4. Aplique los cambios de código con el botón Recarga activa o presione ALT+F10.

    Screenshot of the Hot Reload button.

Para ver los cambios en la interfaz de usuario, hay que volver a ejecutar el código. Por ejemplo, se debe volver a ejecutar el código subyacente de un botón o el código que se desencadena a un intervalo dado mediante un temporizador. Otro ejemplo más sería que ASP.NET Core admite la actualización automática del explorador gracias a la funcionalidad MetadataUpdateHandler.

Compatibilidad con aplicaciones .NET

  • Al usar Visual Studio 2022 e iniciar la aplicación con el depurador, la experiencia básica de Recarga activa funciona con la mayoría de los tipos de aplicaciones .NET y versiones del marco de trabajo. Se incluyen .NET Framework, .NET Core y .NET 5+ (para C# y Visual Basic, según corresponda). La expectativa en este escenario es que, si se usa el depurador, hay que suponer que Recarga activa está disponible para usted y pruébalo.
  • Cuando se usa Visual Studio 2022 pero no se usa el depurador (por ejemplo, mediante CTRL-F5 para iniciar la aplicación), Recarga activa está disponible cuando el destino es la mayoría de los tipos de aplicaciones de .NET 6. Esto significa que las aplicaciones que no tienen como destino .NET 6 (.NET 5 o una versión inferior) no admiten el escenario "sin depurador" y deben usar el depurador para obtener la compatibilidad con Recarga activa.
  • Si se usa Visual Studio 2022 con una aplicación .NET 6, se admiten la mayoría de los escenarios. Esto no se limita a la nueva característica "sin depurador" mencionada anteriormente. También incluye otras nuevas funcionalidades, como la compatibilidad con los proyectos de Blazor de recarga activa y, más generalmente, la edición de archivos de Razor en cualquier aplicación ASP.NET Core y Recarga activa de CSS. El uso de Visual Studio 2022 y las aplicaciones cuyo destino conjunto es .NET 6 le ofrecerá la experiencia de Recarga activa de XAML más eficaz.

En la tabla siguiente se muestran los proyectos que admiten la Recarga activa de .NET con el depurador asociado (F5) y sin el depurador asociado (Ctrl+F5), según la versión mínima de .NET necesaria para la compatibilidad en Visual Studio 2022 (17.8).

Tipo de aplicación F5 Ctrl+F5 Compatibilidad con MetadataUpdateHandler
Consola .NET 6 .NET 6
Ejecución en Linux/macOS
(Docker y WSL)
.NET 8 .NET 6 .NET 8
Ejecución en Arm64 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor Server .NET 6 .NET 6 .NET 6
WebAssembly de Blazor .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

Los tipos de ediciones que puede realizar con Recarga activa los determinan el tiempo de ejecución y la versión del compilador, no el método que se usó para iniciar la aplicación (F5 o Ctrl+F5).

En las secciones siguientes, ampliaremos el resumen anterior y profundizaremos en más detalles.

Compatibilidad con aplicaciones de C++

Al usar Visual Studio 2022 e iniciar la aplicación con el depurador, puede volver a cargar en caliente una aplicación nativa de C++ cuando se ejecuta en el depurador (F5) mediante el botón Recarga activa. Recarga activa también se admite para aplicaciones creadas con proyectos de CMake y OpenFolder.

Para que el proyecto admita Recarga activa, necesitará:

  • Proyecto > Propiedades > C/C++ > General >Formato de información de depuración se debe establecer en "Base de datos de programa para Editar y continuar/ZI"
  • Proyecto > Propiedades > Enlazador > General >Habilitar vinculación incremental se debe establecer en "Sí /INCREMENTAL"

Para saber qué ediciones se admiten, consulte Cambios de código admitidos de C++.

Visual Studio 2022 con una aplicación .NET, al usar el depurador

Si se usa Visual Studio 2022 y se inicia la aplicación con el depurador, Recarga activa funciona con la mayoría de los marcos de aplicación.

En cualquier lugar que tenga .NET y use el depurador Visual Studio administrado, debe obtener compatibilidad básica de Recarga activa. Esto significa que incluso los proyectos como Azure Functions funcionan bien en este escenario.

Nota:

De forma predeterminada algunos proyectos usan la depuración en modo mixto, que no admite Recarga activa. Para modificarlo en la configuración del proyecto, establezca Proyecto > Propiedades > Depurar > Abrir interfaz de usuario de perfiles de inicio de depuración > Habilitar depuración de código nativo en falso.

Visual Studio 2022 con una aplicación .NET, pero no con el depurador

Recarga activa está disponible sin el depurador cuando el destino es la mayoría de los tipos de aplicaciones de .NET 6+.

Esta característica es exclusiva de .NET 6+. Estas aplicaciones que no tienen como destino .NET 6+ (es decir, .NET 5 o una versión inferior) no admitirán el escenario "sin depurador" y deben usar el depurador para obtener acceso a la funcionalidad de Recarga activa.

Además, tenga en cuenta que actualmente no todos los tipos de proyecto admiten el escenario "sin depurador". Consulte Compatibilidad con aplicaciones .NET.

Visual Studio 2022 con una aplicación de .NET 6+

Si utiliza Visual Studio 2022 y trabaja en aplicaciones cuyo destino es .NET 6, obtendrá las ventajas de la experiencia de Recarga activa más pulida y capaz.

Se admite en este escenario:

  • Aplicaciones de Blazor (Server y WebAssembly*)
  • Edición de archivos de Razor tanto en Blazor como en sitios web de ASP.NET Core normales
  • Recarga activa de CSS
  • Recarga activa de XAML
  • Recarga activa al ejecutar aplicaciones sin el depurador (como se describió anteriormente con más detalle)

Si tiene como destino .NET 6, seguirá recibiendo mejoras en las próximas actualizaciones de Visual Studio 2022 y en la banda de características y las versiones principales de .NET.

Servidores de ASP.NET Core admitidos

La experiencia de Recarga activa básica es compatible con muchos escenarios de ASP.NET. La característica más ampliamente disponible es la capacidad de cambiar el código subyacente y otros archivos de clase .NET para la mayoría de los tipos de aplicaciones web. Esta característica funciona al usar el depurador de Visual Studio y está presente en todos los lugares en los que Recarga activa estaba disponible anteriormente. Para obtener orientación más específica, consulte el artículo sobre la compatibilidad de Recarga activa de .NET con ASP.NET Core.

Para los desarrolladores de ASP.NET Core que tienen como destino .NET 6+, hay funcionalidades adicionales que no están disponibles para versiones inferiores de .NET. Estas son algunas de ellas:

  • CSHTML: la edición de un archivo CSHTML de Razor ahora admitirá muchos más tipos de ediciones.
  • Actualización del explorador: la edición de un archivo Razor ahora actualizará automáticamente los cambios en el explorador web al realizar la depuración. Anteriormente esto solo estaba disponible al iniciar la aplicación sin el depurador
  • Recarga activa de CSS: ahora es posible cambiar los archivos CSS mientras se ejecuta la aplicación y los cambios se aplicarán inmediatamente a la aplicación en ejecución a medida que escriba.
  • Sin depurador: se obtiene Recarga activa al usar Visual Studio para iniciar la aplicación web sin el depurador (CTRL-F5).

Cambios en .NET admitidos

La experiencia de Recarga activa de .NET tiene la tecnología del depurador y el compilador de C# (Roslyn). En Ediciones admitidas de Roslyn y Cambios de código admitidos (C# and VB) se enumeran los tipos de ediciones compatibles actualmente y las posibles mejoras futuras.

Proyectos de .NET no admitidos

Recarga activa no está disponible en algunas configuraciones de proyecto:

  • Si usa Visual Studio sin el depurador, Recarga activa solo funciona para las aplicaciones .NET cuyo destino es a .NET 6+.
  • Si usa el depurador de Visual Studio para ejecutar la aplicación, pero se ha deshabilitado Enable Hot Reload and Edit and Continue when debugging en la configuración, Recarga activa no se admite.
  • No se admiten las configuraciones de compilación personalizadas o de versión. El proyecto debe usar la configuración de compilación Debug.
  • Si tiene como destino un proyecto nativo de F# o .NET.
  • Algunas optimizaciones de inicio o compilación no se admiten en Recarga activa de .NET. Por ejemplo, si el perfil de depuración del proyecto se configura de las maneras siguientes, no se admite Recarga activa de .NET:
    • El recorte está habilitado para el proyecto. Por ejemplo, no se admite si PublishTrimmed se establece en True en el archivo de proyecto para el perfil de depuración.
    • ReadyToRun está habilitado para el proyecto. Por ejemplo, no se admite si PublishReadyToRun se establece en True en el archivo de proyecto para el perfil de depuración.

Para más información, consulte Escenarios no admitidos.

Configuración de Recarga activa

Para habilitar, deshabilitar o configurar Recarga activa, consulte Configuración de Editar y continuar.

Mensaje de advertencia

Si ve el siguiente cuadro de diálogo, Recarga activa no puede aplicar las ediciones actuales sin reiniciar. Puede volver a compilar la aplicación y aplicar cambios (reiniciar) o continuar con la edición. Si se vuelve a compilar, se pierde todo el estado de la aplicación. Si continúa con la edición, es posible que Recarga activa vuelva a funcionar si lleva a cabo más cambios o correcciones.

Screenshot of the apply changes dialog box

Si selecciona la opción Recompilar siempre cuando no se puedan aplicar cambios del cuadro de diálogo, no volverá a ver el cuadro de diálogo en la sesión actual de Visual Studio y Visual Studio se volverá a generar y a cargar automáticamente, en lugar de mostrar el cuadro de diálogo.

Solución de problemas

Se recomienda encarecidamente examinar la ventana Salida de Recarga activa, ya que contiene información detallada de diagnóstico relativa a la sesión de Recarga activa.

Si usa la compresión de respuesta en .NET Core, vea la información sobre la compresión de respuesta.