Partilhar via


Escrever e depurar código a correr com Hot Reload no Visual Studio (C#, Visual Basic, C++)

O Hot Reload era anteriormente conhecido como Editar e Continuar na documentação do Visual Studio e em alguns textos legados da interface.

A partir do Visual Studio 2022, a experiência Hot Reload no Visual Studio funciona tanto para aplicações .NET geridas como para aplicações nativas em C++. Independentemente do tipo de aplicação em que está a trabalhar, a intenção do Hot Reload é poupar-lhe o maior número possível de reinícios entre edições, tornando-o mais produtivo ao reduzir o tempo que passa à espera que as apps se reconstruam, reiniciem e renaveguem para a localização anterior onde estava na própria aplicação.

Melhoramos a produtividade ao permitir que edite os ficheiros de código da sua aplicação e aplique imediatamente as alterações de código à aplicação em execução, também conhecido como Hot Reload. Uma vez que suas alterações são aplicadas, execute novamente seu código executando uma ação no próprio aplicativo (ou através de algum tipo de temporizador, etc.) e veja as alterações imediatamente; Nenhuma pausa do aplicativo através de pontos de interrupção é necessária!

Atualizar código em execução com Hot Reload

  1. Abra um projeto com base em um tipo de aplicativo suportado. Veja .NET e C++ aplicações suportadas.

  2. Inicie a aplicação com o depurador anexado utilizando F5 ou, se suportado, , Ctrl+F5.

  3. Abra um arquivo de código e altere o código.

  4. Aplique as alterações de código usando o botão Hot ReloadCaptura de ecrã do ícone Hot Reload., ou pressione ALT+F10.

    Captura de ecrã de Hot Reload.

Para ver as alterações na interface do usuário, o código precisa ser executado novamente. Por exemplo, o código associado a um botão precisa ser reexecutado, ou o código que é acionado periodicamente por meio de um temporizador. Como outro exemplo, ASP.NET Core suporta atualização automática do navegador devido à funcionalidade MetadataUpdateHandler.

Suporte para aplicações .NET

  • Ao usar Visual Studio 2022 e iniciar a sua aplicação com o depurador, a experiência básica de Hot Reload funciona com a maioria dos tipos de aplicações .NET e versões do framework. Este suporte inclui .NET Framework, .NET Core e .NET 5+ (para C# e Visual Basic, conforme aplicável). A expectativa neste cenário é que, se estiver a usar o depurador, assuma que o Hot Reload está disponível para si e experimente!
  • Ao usar o Visual Studio 2022, mas não o depurador (por exemplo, usando CTRL-F5 para iniciar a aplicação), o Hot Reload está disponível para a maioria dos tipos de aplicações .NET 6. Neste cenário, aplicações que não visam .NET 6+ (ou seja, que visam .NET 5 ou inferior) não suportam o cenário "sem depurador" e têm de usar o depurador para obter suporte para Hot Reload.
  • Ao usar Visual Studio 2022 com uma aplicação .NET 6+, a maioria dos cenários é suportada. Esse suporte não está limitado ao novo recurso "sem depurador" mencionado anteriormente. Inclui também outras novas capacidades, como suporte para recarga dinâmica de projetos Blazor e, mais geralmente, edição de ficheiros Razor em qualquer aplicação ASP.NET Core, e recarga dinâmica de CSS. Usar o Visual Studio 2022 e aplicações que visam .NET 6 em conjunto proporciona-lhe a experiência de Hot Reload mais poderosa.

A tabela seguinte mostra a versão mínima de .NET necessária para suportar .NET Hot Reload com o depurador associado (F5) e sem o depurador associado (Ctrl+F5), com base no tipo de projeto. Visual Studio 2022 versão 17.8 ou posterior é obrigatória.

Tipo de aplicação F5 Ctrl+F5 Suporte MetadataUpdateHandler
Consola .NET 6 .NET 6
A executar no Linux/macOS
(Docker e WSL)
.NET 8 .NET 6 .NET 8
Executando 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
Blazor WebAssembly (estrutura para desenvolvimento de aplicações web) .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

Os c0 de edições que podes fazer com Hot Reload são determinados pelo tempo de execução e pela versão do compilador, não pelo método que usaste para iniciar a aplicação (F5 ou Ctrl+F5).

Nas seções a seguir, fornecemos detalhes adicionais.

Suporte para aplicações do .NET Framework

Ao usar o Visual Studio 2022 e iniciar a sua aplicação com o depurador, a experiência básica do Hot Reload funciona com a maioria dos tipos de aplicações .NET e versões do framework. Este suporte inclui .NET Framework, .NET Core e .NET 5+ (para C# e Visual Basic, conforme aplicável). A expectativa neste cenário é que, se estiver a usar o depurador, assuma que o Hot Reload está disponível para si e experimente!

Suporte para aplicativos C++

Ao usar o Visual Studio 2022 e iniciar a sua aplicação com o depurador, pode recarregar dinamicamente uma aplicação nativa em C++ ao executá-la sob o depurador (F5) usando o botão Hot Reload. O Hot Reload também é suportado para aplicações construídas com projetos CMake e OpenFolder.

Para o seu projeto suportar o Hot Reload, precisa de definir as seguintes opções:

  • Project > Propriedades > C/C++ > Geral >Formato de Informação de Depuração deve ser definido para "Program Database for Edit and Continue /ZI"
  • Project > Propriedades > Ligador > Geral >Ativar a ligação incremental deve ser definido como "Sim /INCREMENTAL"

Para obter as edições suportadas, consulte C++ Supported Code Changes.

Visual Studio 2022 com uma aplicação .NET ou .NET Framework, quando se utiliza o depurador

Ao usar o Visual Studio 2022 e iniciar a aplicação com o depurador, o Hot Reload funciona com a maioria dos frameworks de aplicações.

Em qualquer lugar onde tenhas .NET e estejas a usar o depurador gerido do Visual Studio, deves ter suporte básico para Hot Reload. Este facto significa que até projetos como o Funções do Azure funcionam muito bem neste cenário.

Observação

Por padrão, alguns projetos usam depuração em modo misto, que não suporta Hot Reload. Pode modificar esta definição nas definições do projeto, configurando Project > Propriedades > Debug > Abrir interface de utilizador dos perfis de lançamento de depuração > Ativar a depuração nativa de código para falso.

Visual Studio 2022 com uma aplicação .NET, mas sem usar o debugger

O Hot Reload está disponível sem o depurador quando o alvo são a maioria dos tipos de aplicativos .NET 6+.

Esta funcionalidade é exclusiva do .NET 6+. As aplicações que não têm como alvo .NET 6+ (ou seja, direcionam .NET 5 ou inferior) não suportam o cenário "sem depurador" e têm de usar o depurador para aceder à funcionalidade Hot Reload.

Além disso, nem todos os tipos de projetos suportam atualmente o cenário "sem depurador", veja Suporte para aplicações .NET.

Visual Studio 2022 com uma aplicação .NET 6+

Se usar tanto o Visual Studio 2022 como trabalhar em aplicações direcionadas ao .NET 6+, beneficia da experiência de Hot Reload mais polida e competente.

Suportado neste cenário:

  • Aplicativos Blazor (Server e WebAssembly)
  • Editar ficheiros Razor tanto em Blazor como em sites regulares de ASP.NET Core
  • CSS Hot Reload
  • XAML Hot Reload
  • Suporte para Hot Reload ao executar aplicações sem o depurador (como descrito anteriormente com mais detalhe)

Se direcionares a utilização para o .NET 6+, continuarás a receber melhorias nas atualizações futuras do Visual Studio 2022 e nos lançamentos de novas funcionalidades e principais do .NET.

Cenários ASP.NET Core Suportados

A experiência básica de Hot Reload é suportada para muitos cenários ASP.NET. A funcionalidade mais amplamente disponível é a capacidade de alterar ficheiros de classes code-behind e outros .NET para a maioria dos tipos de aplicações web. Esta funcionalidade funciona ao usar o depurador do Visual Studio e está presente em qualquer lugar onde o Hot Reload esteve disponível anteriormente. Para orientações mais específicas, veja suporte do .NET Hot Reload para ASP.NET Core.

Para programadores ASP.NET Core que estão a apontar para o .NET 6+, existem capacidades adicionais que não estão disponíveis para versões inferiores do .NET. Esses recursos incluem:

  • CSHTML: Editando um arquivo CSHTML Razor suporta muitos tipos de edições.
  • pt-PT: Atualização do Browser: A edição de um arquivo Razor atualiza automaticamente no seu navegador as alterações durante a depuração. Anteriormente, esse recurso só estava disponível ao iniciar o aplicativo sem o depurador.
  • CSS Hot Reload: Podes alterar ficheiros CSS enquanto a aplicação está a correr, e as alterações são aplicadas imediatamente à aplicação em execução à medida que escreves.
  • No Debugger: Recebes suporte a Hot Reload ao usar o Visual Studio para iniciar a sua aplicação web sem o uso do depurador (CTRL-F5).

Alterações suportadas em .NET

A experiência .NET Hot Reload é alimentada pelo compilador debugger e C# (Roslyn). Roslyn suporta as edições e as alterações de código suportadas (C# e VB). Liste os tipos de edições atualmente suportadas e as potenciais melhorias futuras.

Alterações suportadas no .NET Framework

A experiência .NET Hot Reload é alimentada pelo compilador debugger e pelo compilador C#. As alterações de código suportadas (C# e VB) listam os tipos de edições atualmente suportadas e possíveis aprimoramentos futuros.

Projetos .NET e .NET Framework não suportados

O Hot Reload não está disponível em algumas configurações de projeto:

  • Se estiveres a usar o Visual Studio sem o depurador, o Hot Reload só funciona para aplicações .NET direcionadas a .NET 6+.
  • Se estiveres a usar o depurador Visual Studio para correr a tua aplicação, mas desativaste Enable Hot Reload and Edit and Continue when debugging nas definições, Hot Reload não é suportado.
  • Não há suporte para configurações de versão ou compilação personalizadas. Seu projeto deve usar a configuração de compilação Debug.
  • Se estiver destinado a um projeto F# ou .NET Native.
  • Algumas otimizações de arranque ou compilação não são suportadas em .NET Hot Reload. Por exemplo, se o perfil de depuração do seu projeto estiver configurado das seguintes formas, .NET Hot Reload não é suportado:
    • O corte está habilitado para o seu projeto. Por exemplo, não há suporte se PublishTrimmed estiver definido como True no arquivo de projeto para o perfil de depuração.
    • ReadyToRun está habilitado para seu projeto. Por exemplo, não há suporte se PublishReadyToRun estiver definido como True no arquivo de projeto para o perfil de depuração.

Consulte Cenários sem suporte para obter mais detalhes.

Hot Reload não é suportado para F#

O Hot Reload, também conhecido como Edit and Continue, não é suportado quando se está a depurar código F#. Edições no código F# são possíveis durante uma sessão de depuração, mas devem ser evitadas. As alterações de código não são aplicadas durante a sessão de depuração. Portanto, quaisquer edições feitas no código F# durante a depuração resultarão em código-fonte que não corresponde ao código que está sendo depurado.

Configurar Hot Reload

Para ativar, desativar ou configurar Hot Reload, veja Configurar Editar e Continuar.

Mensagem de aviso

Se vires a seguinte caixa de diálogo, o Hot Reload não consegue aplicar as edições atuais sem reiniciar. Você pode optar por reconstruir o aplicativo e aplicar alterações (reiniciar) ou continuar editando. Se reconstruir, todo o estado da aplicação será perdido. Se continuares a editar, é possível que alterações ou correções adicionais façam com que o Hot Reload volte a funcionar.

Captura de ecrã da caixa de diálogo de aplicar alterações.

Captura de ecrã da caixa de diálogo de aplicar alterações.

Se selecionares a opção Sempre reconstruir quando não puderem ser aplicadas alterações na caixa de diálogo, não vais voltar a ver a caixa de diálogo na sessão de Visual Studio atual, e Visual Studio irá reconstruir e recarregar automaticamente em vez de mostrar a caixa de diálogo.

Solução de problemas

Se o Hot Reload não estiver a funcionar como esperado, verifique o seguinte:

  • Confirma se estás a usar uma aplicação e cenário suportados. Alguns tipos de projetos, depuração em modo misto, código otimizado e cenários de Anexação ao Processo não suportam *Hot Reload*. Para mais informações, veja Cenários não suportados.
  • Certifique-se de que a aplicação está a usar uma configuração Debug e que a Hot Reload está ativada em Tools>Options>Debugging>.NET/C++ Hot Reload.
  • Defina Logging Verbosity para Detailed ou Diagnostic para obter mais informação na saída Hot Reload.
  • Abra a janela Output e, em Mostrar saída de, selecione Hot Reload para rever mensagens de diagnóstico.
  • Se uma linha aparecer como apenas leitura durante a depuração, pode ser uma instrução ativa na pilha de chamadas, ou a edição pode exigir um reinício.

Para uma lista de diagnósticos comuns, veja mensagens de erro do Hot Reload e Editar e Continuar. Se o problema persistir e o resultado não mostrar uma causa clara, use Report a Problem para enviar feedback à equipa Visual Studio.

Se estiver a usar compressão de resposta no .NET Core, consulte a informação sobre compressão de resposta.