Alterações de código com suporte (C# e Visual Basic)

O mecanismo de Recarga Dinâmica, anteriormente chamado 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.

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
Iterators 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 linguagem Operação de edição com suporte Limitações
Tipos Adicionar métodos, campos, construtores, e muito mais Sim
Iterators 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 cadeias 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.

Aprimoramentos no .NET 6+

Aprimoramentos 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 possível em versões mais antigas do Visual Studio. Os aprimoramentos anteriores estão disponíveis para as experiências de Recarga Dinâmica e 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 de código sem suporte

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 chamada para chegar à instruçã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 Delete
    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ódigo
    Membros (Visual Basic) – Modificar um membro com instrução Em Erro ou Resume
    - Modificar um membro que contém uma cláusula de consulta LINQ Aggregate, Group By, Simple Join ou Group Join
    Métodos – Modificar assinaturas
    – Fazer com que um método abstrato se torne não abstrato adicionando um corpo do método
    – Excluir o corpo do método
    Atributos 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 instruçõ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)
    Iterators Modificar um iterador em um projeto direcionado ao .NET Framework 4 e anteriores (consulte detalhes)
    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ódigo
    Membros (Visual Basic) – Modificar um membro com instrução Em Erro ou Resume
    - Modificar um membro que contém uma cláusula de consulta LINQ Aggregate, Group By, Simple Join ou Group Join
    Métodos – Modificar assinaturas
    – Fazer com que um método abstrato se torne não abstrato adicionando um corpo do método
    – Excluir o corpo do método
    Atributos 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 instruçõ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)
    Iterators 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 suportados 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 da área de trabalho)

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 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 quiser usar Editar e Continuar, considere definir a versão somente em builds de Versão (ou CI) e mantenha constante a versão em builds de depuração.

  • 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.