Partilhar via


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ódigo
    Membros (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 LINQ
    Metodologia - Modificar assinaturas
    - Fazer com que um método abstrato se torne não abstrato, adicionando um corpo de método
    - Excluir corpo do método
    Atributos 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ódigo
    Membros (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 LINQ
    Metodologia - Modificar assinaturas
    - Fazer com que um método abstrato se torne não abstrato, adicionando um corpo de método
    - Excluir corpo do método
    Atributos 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 Anexar ao Processo) em vez de executar o aplicativo escolhendo 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.