Compatibilidade de aplicativos no .NET Framework

A compatibilidade é uma meta importante de cada versão do .NET Framework. A compatibilidade garante que cada versão é aditiva e, portanto, as versões anteriores continuarão a funcionar. Por outro lado, as alterações na funcionalidade anterior (por exemplo, para melhorar o desempenho, resolver problemas de segurança ou corrigir bugs) podem causar problemas de compatibilidade no código ou nos aplicativos existentes que são executados em uma versão posterior.

Cada aplicativo visa uma versão específica do .NET Framework por:

  • Definição de uma estrutura de destino no Visual Studio.
  • Especificação da estrutura de destino em um arquivo de projeto.
  • Aplicação de um TargetFrameworkAttribute ao código-fonte.

Ao migrar de uma versão do .NET Framework para outra, há dois tipos de alterações a serem consideradas:

Alterações em runtime

Problemas de runtime são aqueles que surgem quando um novo runtime é colocado em um computador e o comportamento de um aplicativo é alterado. Ao executar em uma versão mais recente do que o destino, o .NET Framework usa o comportamento quirked para imitar a versão de destino mais antiga. O aplicativo é executado na nova versão, mas age como se estivesse sendo executado na versão anterior. Muitos dos problemas de compatibilidade entre as versões do .NET Framework são mitigados por meio desse modelo peculiar. Por exemplo, se um binário foi compilado para .NET Framework 4.0, mas é executado em um computador com .NET Framework 4.5 ou posterior, ele é executado em .NET Framework modo de compatibilidade 4.0. Isso significa que muitas das alterações na versão posterior não afetarão o binário.

A versão do .NET Framework que um aplicativo visa é determinada pela versão de destino do assembly de entrada para o domínio do aplicativo no qual o código é executado. Todos os assemblies adicionais carregados nesse domínio do aplicativo são direcionados a essa versão. Por exemplo, no caso de um executável, a versão para a qual o executável é direcionado é o modo de compatibilidade no qual todos os assemblies desse domínio do aplicativo serão executados.

Alterações de redirecionamento

As alterações de redirecionamento são aquelas que surgem quando um assembly é recompilado para ter como destino uma versão mais recente. Ter uma nova versão como destino significa que o assembly aceita os novos recursos, bem como os possíveis problemas de compatibilidade dos recursos antigos.

Classificação de impacto

Nos artigos que descrevem alterações de tempo de execução e redirecionamento, por exemplo, Alterações de redirecionamento para migração para .NET Framework 4.8.x, itens individuais são classificados por seu impacto esperado da seguinte forma:

Principal
Uma alteração significativa que afeta um grande número de aplicativos ou que exige a modificação significativa do código.

Secundária
Uma alteração que afeta um pequeno número de aplicativos ou que exige modificação secundária do código.

Caso de borda
Uma alteração que afeta aplicativos em cenários muito específicos que não são comuns.

Transparente
Uma alteração que não tem efeito visível para o desenvolvedor ou o usuário do aplicativo. O aplicativo não deve exigir modificação por conta dessa alteração.

Confira também