Gravar e depurar o código em execução com a Recarga Dinâmica no Visual Studio (C#, Visual Basic, C++)

A partir do Visual Studio 2022, a experiência de Recarga Dinâmica no Visual Studio funciona para aplicativos gerenciados do .NET e nativos do C++. Independentemente do tipo de aplicativo no qual você está trabalhando, a intenção da Recarga Dinâmica é eliminar o máximo possível de reinicializações de aplicativo entre edições, dando a você mais produtividade ao reduzir o tempo gasto aguardando que os aplicativos recompilem, reiniciem, naveguem novamente até o local anterior em que você estava no próprio aplicativo, et al.

Conseguimos isso possibilitando que você edite os arquivos de código do aplicativo e aplique as alterações de código imediatamente ao aplicativo em execução, também conhecido como Recarga Dinâmica. Depois que as alterações forem aplicadas, execute novamente seu código executando uma ação no próprio aplicativo (ou por meio de algum tipo de temporizador etc.) e veja as alterações imediatamente. As pausas do aplicativo por meio de pontos de interrupção não são necessárias.

Atualizar o código em execução com a Recarga Dinâmica

  1. Abra um projeto com base em um tipo de aplicativo com suporte. Confira os aplicativos compatíveis com .NET e do C++.

  2. Inicie o aplicativo com o depurador anexado usando F5 ou, se compatível, Ctrl+F5.

  3. Abra um arquivo de código e faça alterações.

  4. Aplique as alterações de código usando o botão Recarga Dinâmica ou pressione ALT+F10.

    Screenshot of the Hot Reload button.

Para ver as alterações na interface do usuário, o código precisa ser executado novamente. Por exemplo, o code-behind de um botão deve ser executado novamente ou código que está sendo disparado em um intervalo por meio de um temporizador. Como outro exemplo, o ASP.NET Core oferece suporte à atualização automática do navegador devido à funcionalidade MetadataUpdateHandler.

Suporte para aplicativos .NET

  • Ao usar o Visual Studio 2022 e iniciar seu aplicativo com o depurador, a experiência básica da Recarga Dinâmica funciona com a maioria dos tipos de aplicativos e versões de estrutura do .NET. Isso inclui o .NET Framework, o .NET Core e o .NET 5+ (para C# e Visual Basic, conforme aplicável). A expectativa neste cenário é que, se você estiver usando o depurador, pressuponha que a Recarga Dinâmica está disponível para você e experimente.
  • Ao usar o Visual Studio 2022, mas não usar o depurador (por exemplo, usando o CTRL-F5 para iniciar o aplicativo), a Recarga Dinâmica está disponível ao visar a maioria dos tipos de aplicativos do .NET 6. Isso significa que os aplicativos que não visam o .NET 6 (.NET 5 ou inferior) não são compatíveis com o cenário "sem depurador" e devem usar o depurador para obter o suporte da Recarga Dinâmica.
  • Ao usar o Visual Studio 2022 com um aplicativo do .NET 6, há suporte para a maioria dos cenários. Isso não se limita ao novo recurso "sem depurador" mencionado acima. Também inclui outros novos recursos, como suporte para recarrega dinâmica de projetos Blazor e, em geral, edição de arquivos Razor em qualquer aplicativo do ASP.NET Core e Recarga Dinâmica do CSS. Usar o Visual Studio 2022 e aplicativos direcionados ao .NET 6 juntos oferecerá a experiência mais poderosa de Recarga Dinâmica.

A tabela a seguir mostra quais projetos são compatíveis com a Recarga Dinâmica do .NET com o depurador anexado (F5) e sem o depurador anexado (Ctrl+F5), de acordo com a versão mínima do .NET necessária para suporte no Visual Studio 2022 (17.8).

Tipo de aplicativo F5 Ctrl+F5 Suporte a MetadataUpdateHandler
Console .NET 6 .NET 6
Em execução no Linux/macOS
(Docker e WSL)
.NET 8 .NET 6 .NET 8
Em execução no Arm64 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Servidor Blazor .NET 6 .NET 6 .NET 6
WebAssembly Blazor .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

Os tipos de edições que você pode fazer com a Recarga Dinâmica são determinados pelo runtime e pela versão do compilador, não pelo método usado para iniciar o aplicativo (F5 ou Ctrl+F5).

Nas seções a seguir, expandiremos o resumo acima e veremos mais detalhes.

Suporte para aplicativos C++

Ao usar o Visual Studio 2022 e iniciar seu aplicativo com o depurador, você pode recarregar um aplicativo C++ nativo ao executar no depurador (F5) usando o botão Recarga Dinâmica. A Recarga Dinâmica também é compatível com os aplicativos criados usando projetos CMake e OpenFolder.

Para que seu projeto dê suporte à Recarga Dinâmica, você precisará:

  • Propriedades do projeto > C/C++ > General>> Debug Information Format deve ser definido como "Program Database for Edit and Continue "/ZI
  • Propriedades do Project >> Vinculador > Geral >Habilitar de Vinculação Incremental devem ser definidas como "Sim /INCREMENTAL"

Para ver as edições compatíveis, confira Alterações de código compatíveis com C++.

Visual Studio 2022 com um aplicativo do .NET, ao usar o depurador

Ao usar o Visual Studio 2022 e iniciar o aplicativo com o depurador, a Recarga Dinâmica funciona com a maioria das estruturas de aplicativo.

Em qualquer lugar que tenha o .NET e esteja usando o depurador gerenciado do Visual Studio, você deve obter o suporte básico da Recarga Dinâmica. Esse fato significa que até projetos como o Azure Functions funcionam muito bem nesse cenário.

Observação

Alguns projetos usam por padrão a depuração de modo misto, que não dá suporte à Recarga Dinâmica. Você pode modificar isso nas configurações do projeto, definindo Projeto > Propriedades > Debug > Abrir a UI dos perfis de inicialização de depuração > Habilitar depuração de código nativo como falso.

Visual Studio 2022 com um aplicativo do .NET, mas não ao usar o depurador

A Recarga Dinâmica está disponível sem o depurador ao direcionar a maioria dos tipos de aplicativos .NET 6+.

Esse recurso é exclusivo do .NET 6+. Esses aplicativos que não têm como destino o .NET 6+ (ou seja, .NET 5 ou inferior) não darão suporte ao cenário "sem depurador" e devem usar o depurador para obter acesso à funcionalidade de Recarga Dinâmica.

Além disso, lembre-se de que nem todos os tipos de projeto atualmente dão suporte ao cenário "sem depurador", consulte Suporte para aplicativos .NET.

Visual Studio 2022 com um aplicativo do .NET 6+

Se você usar o Visual Studio 2022 e trabalhar em aplicativos que visam o .NET 6+, obterá os benefícios de uma experiência mais sofisticada e adequada da Recarga Dinâmica.

Com suporte neste cenário:

  • Aplicativos Blazor (Server e WebAssembly)
  • Editar os arquivos do Razor em sites regulares do Blazor e do ASP.NET Core
  • Recarga Dinâmica do CSS
  • XAML Hot Reload
  • Suporte à Recarga Dinâmica ao executar aplicativos sem o depurador (conforme descrito anteriormente com mais detalhes)

Se você visa o .NET 6+, continuará obtendo melhorias nas próximas atualizações do Visual Studio 2022 e na faixa de recursos do .NET e nas principais versões.

Cenários com suporte do ASP.NET Core

Há suporte para a experiência básica da Recarga Dinâmica em muitos cenários do ASP.NET. O recurso mais amplamente disponível é a capacidade de alterar o code-behind e outros arquivos de classe do .NET para a maioria dos tipos de aplicativos Web. Esse recurso funciona enquanto usa o depurador do Visual Studio e está presente em qualquer lugar em que a Recarga Dinâmica estava disponível anteriormente. Para obter diretrizes mais específicas, confira Suporte à Recarga Dinâmica do .NET para ASP.NET Core.

Para desenvolvedores do ASP.NET Core que visam o .NET 6, há recursos adicionais indisponíveis para versões inferiores do .NET. Esses recursos incluem:

  • CSHTML: A edição de um arquivo CSHTML do Razor é compatível com muitos tipos de edições.
  • Atualização do Navegador: a edição de um arquivo do Razor atualiza automaticamente as alterações no navegador da Web durante a depuração. Esse recurso já estava disponível somente ao iniciar o aplicativo sem o depurador.
  • Recarga Dinâmica do CSS: você pode alterar os arquivos CSS enquanto o aplicativo está em execução e as alterações são aplicadas imediatamente ao aplicativo em execução à medida que você digita.
  • Sem Depurador: você obtém o suporte à Recarga Dinâmica ao usar o Visual Studio para iniciar seu aplicativo Web sem o depurador (CTRL-F5).

Alterações do .NET com suporte

A experiência de Recarga Dinâmica do .NET é alimentada pelo depurador e pelo compilador C# (Roslyn). As edições compatíveis com Roslyn e alterações de código compatíveis (C# e VB) listam os tipos de edições compatíveis no momento e possíveis aprimoramentos futuros.

Projetos .NET sem suporte

A Recarga Dinâmica não está disponível em algumas configurações de projeto:

  • Se você estiver usando o Visual Studio sem o depurador, a Recarga Dinâmica só funcionará para aplicativos .NET direcionados ao .NET 6+.
  • Se você estiver usando o depurador do Visual Studio para executar seu aplicativo, mas tiver desabilitado o Enable Hot Reload and Edit and Continue when debugging nas configurações, não haverá suporte para Recarga Dinâmica.
  • Não há suporte para versões ou configurações de build personalizadas. Seu projeto deve usar a configuração de build Debug.
  • Se você estiver direcionando um projeto F# ou .NET Native.
  • Não há suporte para algumas otimizações de inicialização ou compilação na Recarga Dinâmica do .NET. Por exemplo, se o perfil de depuração do projeto estiver configurado das seguintes maneiras, não haverá suporte para a Recarga Dinâmica do .NET:
    • A Filtragem está habilitada para seu projeto. Por exemplo, não há suporte se o PublishTrimmed estiver definido como True no arquivo de projeto para o perfil de depuração.
    • O ReadyToRun está habilitado para seu projeto. Por exemplo, não há suporte se o PublishReadyToRun estiver definido como True no arquivo de projeto para o perfil de depuração.

Consulte cenários sem suporte para obter mais detalhes.

Configurar Recarga Dinâmica

Para habilitar, desabilitar ou configurar a Recarga Dinâmica, consulte Configurar Editar e Continuar.

Mensagem de aviso

Se você vir a caixa de diálogo a seguir, a Recarga Dinâmica não poderá aplicar as edições atuais sem reiniciar. Você pode optar por recompilar o aplicativo e aplicar as alterações (reiniciar) ou continuar a edição. Se você recompilar, todo o estado do aplicativo será perdido. Se você continuar editando, é possível que alterações ou correções adicionais possam fazer com que a Recarga Dinâmica funcione novamente.

Screenshot of the apply changes dialog box

Se você selecionar a opção Sempre recompilar quando as alterações não puderem ser aplicadas na caixa de diálogo, você não verá a caixa de diálogo novamente na sessão atual do Visual Studio e o Visual Studio será recompilado e recarregado automaticamente em vez de mostrar a caixa de diálogo.

Solução de problemas

É altamente recomendável verificar a janela Output da Recarga Dinâmica para obter informações de diagnóstico detalhadas sobre a sessão de Hot Reload.

Se você estiver usando a compactação de resposta no .NET Core, consulte as informações sobre compactação de resposta.