Alterações de código suportadas (C# e Visual Basic)
O mecanismo Hot Reload, anteriormente chamado Edit and Continue, lida com a maioria dos tipos de alterações de código dentro dos corpos do método. No entanto, a maioria das alterações fora dos corpos do método, e algumas alterações dentro dos corpos do método, não podem ser aplicadas durante a depuração. Para aplicar essas alterações sem suporte, você deve parar a depuração e reiniciar com uma nova versão do código.
O mecanismo Edit and Continue lida com a maioria dos tipos de alterações de código dentro dos corpos do método. No entanto, a maioria das alterações fora dos blocos de código do método e algumas alterações dentro destes blocos não podem ser aplicadas durante a depuração. Para aplicar essas alterações sem suporte, você deve parar a depuração e reiniciar com uma nova versão do código.
Alterações suportadas no código
A tabela a seguir mostra as alterações que podem ser feitas no código C# e Visual Basic durante uma sessão de depuração sem reiniciar a sessão.
Elemento ou recurso de idioma | Operação de edição suportada | Limitações |
---|---|---|
Tipos | Adicionar métodos, campos, construtores e muito mais | Sim |
Iteradores | Adicionar ou modificar | Não |
expressões async/await | Adicionar ou modificar | Sim |
Objetos dinâmicos | Adicionar ou modificar | Não |
expressões lambda | Adicionar ou modificar | Sim |
Expressões LINQ | Adicionar ou modificar | O mesmo que expressões lambda |
Genéricos | Adicionar ou modificar | Sim |
Elemento ou recurso de idioma | Operação de edição suportada | Limitações |
---|---|---|
Tipos | Adicionar métodos, campos, construtores e muito mais | Sim |
Iteradores | Adicionar ou modificar | Não |
expressões async/await | Adicionar ou modificar | Sim |
Objetos dinâmicos | Adicionar ou modificar | Não |
expressões lambda | Adicionar ou modificar | Sim |
Expressões LINQ | Adicionar ou modificar | O mesmo que expressões lambda |
Observação
Recursos de linguagem mais recentes, como interpolação de cadeia de caracteres e operadores condicionais nulos, geralmente são suportados por Edit e Continue. Para obter as informações mais atuais, consulte a página Enc Supported Edits.
Melhorias no .NET 6+
As melhorias no .NET 6+ e no Visual Studio 2022 e versões posteriores incluem suporte para mais tipos de edições que vão além do que era originalmente possível em versões mais antigas do Visual Studio. Essas melhorias estão disponíveis para as experiências Hot Reload e Edit and Continue.
A experiência do .NET 6+ Hot Reload é alimentada pelo mecanismo Edit and Continue e pelo Roslyn. Edições suportadas lista os tipos de edições atualmente suportadas pelo Roslyn e possíveis melhorias futuras.
Alterações não suportadas no código
As alterações a seguir não podem ser aplicadas ao código C# e Visual Basic durante uma sessão de depuração.
Alterações à declaração atual ou qualquer outra declaração ativa.
Uma instrução ativa é qualquer instrução de uma função na pilha de chamadas que foi chamada para chegar à instrução atual.
A instrução atual aparece num fundo amarelo na janela de origem. Outras instruções ativas aparecem em um plano de fundo sombreado e são somente leitura. Essas cores padrão podem ser alteradas na caixa de diálogo Opções.
Quaisquer alterações não suportadas no código por elemento de idioma, conforme descrito na tabela a seguir.
Elemento ou recurso de idioma Operação de edição não suportada Todos os elementos de código Renomear Namespaces Adicionar Namespaces, tipos, membros Suprimir Interfaces Modificar Tipos Adicionar membro abstrato ou virtual, adicionar substituição (consulte detalhes) Tipos Adicionar destruidor Membros - Modificar um membro fazendo referência a um tipo de interoperabilidade incorporado
- Modificar um membro estático depois que ele já tiver sido acessado executando códigoMembros (Visual Basic) - Modificar um membro com a instrução On Error ou Resume
- Modificar um membro que contenha uma cláusula de consulta Aggregate, Group By, Simple Join ou Group Join LINQMetodologia - Modificar assinaturas
- Fazer com que um método abstrato se torne não abstrato, adicionando um corpo de método
- Excluir corpo do métodoAtributos Adicionar ou modificar Eventos ou propriedades Modificar um parâmetro de tipo, um tipo base, um tipo de delegado ou um tipo de retorno Operadores ou indexadores Modificar um parâmetro de tipo, um tipo base, um tipo de delegado ou um tipo de retorno Blocos de captura Modificar quando contém uma instrução ativa try-catch-finalmente blocos Modificar quando contém uma instrução ativa usando instruções Adicionar Métodos assíncronos/lambdas Modificar um método/lambda assíncrono num projeto que tem como alvo o .NET Framework 4 ou inferior (veja os detalhes ) Iteradores Modificar um iterador num projeto destinado ao .NET Framework 4 e versões anteriores (consulte os detalhes em ) Elemento ou recurso de idioma Operação de edição não suportada Todos os elementos de código Renomear Espaços para nomes Adicionar Namespaces, tipos, membros Suprimir Genéricos Adicionar ou modificar Interfaces Modificar Tipos Adicionar membro abstrato ou virtual, adicionar substituição (consulte detalhes) Tipos Adicionar destruidor Membros - Modificar um membro fazendo referência a um tipo de interoperabilidade incorporado
- Modificar um membro estático depois que ele já tiver sido acessado executando códigoMembros (Visual Basic) - Modificar um membro com a instrução On Error ou Resume
- Modificar um membro que contenha uma cláusula de consulta Aggregate, Group By, Simple Join ou Group Join LINQMetodologia - Modificar assinaturas
- Fazer com que um método abstrato se torne não abstrato, adicionando um corpo de método
- Excluir corpo do métodoAtributos Adicionar ou modificar Eventos ou propriedades Modificar um parâmetro de tipo, um tipo base, um tipo de delegado ou um tipo de retorno Operadores ou indexadores Modificar um parâmetro de tipo, um tipo base, um tipo de delegado ou um tipo de retorno Blocos de captura Modificar quando contém uma declaração ativa try-catch-finalmente blocos Modificar quando contém uma instrução ativa usando instruções Adicionar Métodos assíncronos/lambdas Modificar um método assíncrono/lambda em um projeto destinado ao .NET Framework 4 e inferior (consulte detalhes) Iteradores Modificar um iterador em um projeto destinado ao .NET Framework 4 e versões anteriores (consulte detalhes)
Código inseguro
As alterações no código não seguro têm as mesmas limitações que as alterações no código seguro, com uma restrição extra: Editar e continuar não oferece suporte a alterações no código não seguro que sai dentro de um método que contém o operador stackalloc
.
Suporte a aplicações
As aplicações suportadas incluem:
- Aplicativos UWP no Windows 10 ou Windows 11
- Aplicativos x86 e x64 destinados à área de trabalho do .NET Framework 4.6 ou versões posteriores (o .NET Framework é apenas uma versão de área de trabalho)
Para o .NET 6 e posterior, a edição é suportada para os seguintes tipos de ficheiro:
- .cshtml
- .razor
Aplicações, plataformas e operações não suportadas
As aplicações ou plataformas não suportadas incluem:
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS e Android)
Para ASP.NET e ASP.NET Core, a edição não é suportada para os seguintes tipos de ficheiro:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Cenários sem suporte
"A função Editar e Continuar não está disponível nos seguintes cenários de depuração:"
Depuração de modo misto (nativo/gerenciado).
Depuração no Arm64 sem direcionar o .NET 7 ou posterior.
Depuração com o conjunto de variáveis de ambiente COR_ENABLE_PROFILING.
Depurar um aplicativo usando anexar ao processo (
Depurar ) em vez de executar o aplicativo escolhendoAnexar ao Processo Iniciar no menu Depuração. Se você deseja usar Editar e Continuar ao anexar a um processo, a variável de ambiente COMPLUS_ForceENC deve ser definida antes de iniciar o processo ( set COMPLUS_ForceENC=1
).Depuração com versões de assembly não determinísticas (por exemplo, baseadas no tempo). Se pretender usar Editar e Continuar, considere definir a versão apenas nas compilações Release (ou CI) e manter constante a versão nas compilações Debug.
Depuração de código otimizado.
Depuração SQL.
Analisando um ficheiro de despejo.
Depurando um aplicativo de tempo de execução incorporado.
Depurar uma versão antiga do seu código após uma nova versão não conseguiu compilar devido a erros de compilação.