Alterações de código com suporte (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 dos métodos. A maioria das alterações fora dos corpos de método e algumas alterações dentro dos corpos de método, no entanto, não podem ser aplicadas durante a depuração. Para aplicar essas alterações sem suporte, você deverá parar a depuração e reinicializar com uma versão atualizada do código.
O mecanismo Editar e Continuar manipula a maioria dos tipos de alterações de código nos corpos do método. A maioria das alterações fora dos corpos de método e algumas alterações dentro dos corpos de método, no entanto, não podem ser aplicadas durante a depuração. Para aplicar essas alterações sem suporte, você deverá parar a depuração e reinicializar com uma versão atualizada do código.
Alterações de código com suporte
A tabela a seguir mostra as alterações que podem ser feitas no código C# e no Visual Basic durante uma sessão de depuração sem reiniciar a sessão.
Elemento ou recurso de linguagem | Operação de edição com suporte | 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 | Igual às expressões lambda |
Genéricos | Adicionar ou modificar | Sim |
Elemento ou recurso de linguagem | Operação de edição com suporte | 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 | Igual às expressões lambda |
Nota
Recursos de linguagem mais recentes, como interpolação de cadeia de caracteres e operadores condicionais nulos, geralmente são compatíveis com Editar e Continuar. Para obter as informações mais atuais, consulte a página Edições com suporte de Enc.
Melhorias do .NET 6+
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 tanto para o Hot Reload quanto para as experiências de Editar e Continuar.
A experiência da Recarga Dinâmica do .NET 6+ faz parte da plataforma do mecanismo Editar e Continuar e Roslyn. Edições com suporte lista os tipos de edições atualmente compatíveis com Roslyn e possíveis aprimoramentos futuros.
Alterações sem suporte no código
As alterações a seguir não podem ser aplicadas ao código C# e ao Visual Basic durante uma sessão de depuração.
As alterações na instrução atual ou qualquer outra instrução ativa.
Uma instrução ativa é qualquer instrução em uma função na pilha de chamadas que foi invocada para alcançar a declaração atual.
A instrução atual aparece em um plano de 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 sem suporte no código por elemento de linguagem, conforme descrito na tabela a seguir.
Elemento ou recurso de linguagem Operação de edição sem suporte Todos os elementos de código Renomear Namespaces Adicionar Namespaces, tipos, membros Excluir Interfaces Modificar Tipos Adicionar membro abstrato ou virtual, adicionar substituição (consulte detalhes) Tipos Adicionar destruidor Membros – Modificar um membro que faz referência a um tipo de interoperabilidade inserido
– Modificar um membro estático depois que ele já tiver sido acessado executando o códigoMembros (Visual Basic) – Modificar um membro com instrução On Error ou Resume
- Modificar um membro que contém uma cláusula de consulta LINQ Aggregate, Group By, Simple Join ou Group JoinMétodos – Modificar assinaturas
– Fazer com que um método abstrato se torne não abstrato adicionando uma implementação do método
– Excluir o corpo do métodoAtributos Adicionar ou modificar Eventos ou propriedades Modificar um parâmetro de tipo, tipo base, tipo delegado ou tipo de retorno Operadores ou indexadores Modificar um parâmetro de tipo, tipo base, tipo delegado ou tipo de retorno blocos catch Modificar quando ele contém uma instrução ativa Blocos try-catch-finally Modificar quando ele contém uma instrução ativa usando declarações Adicionar Métodos assíncronos/lambdas Modificar um método assíncrono/lambda em um projeto direcionado ao .NET Framework 4 e anteriores (consulte detalhes) Iteradores Modifique um iterador em um projeto direcionado ao .NET Framework 4 ou versões anteriores (veja os detalhes em ) Elemento ou recurso de linguagem Operação de edição sem suporte Todos os elementos de código Renomear Namespaces Adicionar Namespaces, tipos, membros Excluir 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 que faz referência a um tipo de interoperabilidade inserido
– Modificar um membro estático depois que ele já tiver sido acessado executando o códigoMembros (Visual Basic) – Modificar um membro com instrução On Error ou Resume
- Modificar um membro que contém uma cláusula de consulta LINQ Aggregate, Group By, Simple Join ou Group JoinMétodos – Modificar assinaturas
– Transformar um método abstrato em não abstrato adicionando um corpo ao método
– Excluir o corpo do métodoAtributos Adicionar ou modificar Eventos ou propriedades Modificar um parâmetro de tipo, tipo base, tipo delegado ou tipo de retorno Operadores ou indexadores Modificar um parâmetro de tipo, tipo base, tipo delegado ou tipo de retorno blocos catch Modificar quando contém uma afirmação ativa Blocos try-catch-finally Modificar quando ele contém uma instrução ativa instruções using Adicionar métodos assíncronos/lambdas Modificar um método assíncrono/lambda em um projeto direcionado ao .NET Framework 4 e anteriores (consulte detalhes) Iteradores Modificar um iterador em um projeto direcionado ao .NET Framework 4 e anteriores (consulte detalhes)
Código não seguro
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 dá 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 aplicativos
Os aplicativos com suporte incluem:
- Aplicativos UWP no Windows 10 ou Windows 11
- Aplicativos x86 e x64 que tenham como alvo o .NET Framework 4.6 desktop ou versões posteriores (o .NET Framework é apenas uma versão desktop)
Para .NET 6 e posterior, há suporte para edição para os seguintes tipos de arquivo:
- .cshtml
- .razor
Aplicativos, plataformas e operações sem suporte
Aplicativos ou plataformas sem suporte incluem:
- F#
- .NET Nativo
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS e Android)
Para ASP.NET e ASP.NET Core, não há suporte para edição para os seguintes tipos de arquivo:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Cenários sem suporte
Editar e Continuar não está disponível nos seguintes cenários de depuração:
Depuração de modo misto (nativo/gerenciado).
Como depurar no Arm64 sem visar o .NET 7 ou posterior.
Depuração com a variável de ambiente COR_ENABLE_PROFILING definida.
Depurar um aplicativo usando anexar ao processo (Depurar > Anexar ao Processo) em vez de executar o aplicativo escolhendo Iniciar no menu Depurar. Se você quiser usar Editar e Continuar ao anexar a um processo, a variável de ambiente COMPLUS_ForceENC deverá ser definida antes de iniciar o processo (
set COMPLUS_ForceENC=1
).Depuração com versões do assembly não determinísticas (por exemplo, baseadas em tempo). Se você quiser usar Editar e Continuar, considere definir a versão somente em builds de Release (ou CI) e manter a versão constante em builds de Debug.
Depurando código otimizado.
Depuração de SQL.
Depurando um arquivo de despejo.
Depurando um aplicativo inserido de runtime.
Depurando uma versão antiga do código depois que uma nova versão não é compilada devido a erros de compilação.