Partilhar via


Como as alterações de código podem afetar a compatibilidade

Compatibilidade refere-se à capacidade de compilar ou executar código em uma versão de uma implementação .NET diferente daquela com a qual o código foi originalmente desenvolvido. Uma alteração específica pode afetar a compatibilidade de seis maneiras diferentes:

Mudança comportamental

Uma mudança comportamental representa uma mudança no comportamento de um membro. A alteração pode ser visível externamente (por exemplo, um método pode lançar uma exceção diferente), ou pode representar uma implementação alterada (por exemplo, uma alteração na forma como um valor de retorno é calculado, a adição ou remoção de chamadas de método interno ou até mesmo uma melhoria significativa de desempenho).

Quando as mudanças comportamentais são visíveis externamente e modificam o contrato público de um tipo, elas são fáceis de avaliar, pois afetam a compatibilidade binária. As alterações na aplicação são muito mais difíceis de avaliar; dependendo da natureza da alteração e da frequência e padrões de utilização da API, o impacto de uma alteração pode variar de grave a inócuo.

Compatibilidade binária

Compatibilidade binária refere-se à capacidade de um consumidor de uma API usar a API em uma versão mais recente sem recompilação. Alterações como adicionar métodos ou adicionar uma nova implementação de interface a um tipo não afetam a compatibilidade binária. No entanto, remover ou alterar as assinaturas públicas de um assembly para que os consumidores não possam mais acessar a mesma interface exposta pelo assembly afeta a compatibilidade binária. Uma mudança deste tipo é denominada uma alteração binária incompatível.

Compatibilidade de fontes

A compatibilidade de origem refere-se à capacidade dos consumidores existentes de uma API de recompilar em relação a uma versão mais recente sem quaisquer alterações na fonte. Uma alteração incompatível com a fonte ocorre quando um consumidor precisa modificar o código-fonte para que ele seja compilado com êxito em relação a uma versão mais recente de uma API.

Compatibilidade em tempo de design

A compatibilidade em tempo de design refere-se à preservação da experiência em tempo de design entre versões do Visual Studio e outros ambientes de tempo de design. Embora isso possa envolver o comportamento ou a interface do usuário dos designers, o aspeto mais importante da compatibilidade em tempo de design diz respeito à compatibilidade do projeto. Um projeto ou solução deve poder ser aberto e usado em uma versão mais recente do ambiente de tempo de design.

Compatibilidade com versões anteriores

A compatibilidade com versões anteriores refere-se à capacidade de um consumidor existente de uma API de executar uma nova versão enquanto se comporta da mesma maneira. Tanto as alterações comportamentais como as alterações na compatibilidade binária afetam a compatibilidade com versões anteriores. Se um consumidor não puder executar ou se comportar de forma diferente ao executar em relação à versão mais recente da API, a API será incompatível com versões anteriores.

As alterações que afetam a compatibilidade com versões anteriores são desencorajadas, uma vez que os desenvolvedores esperam compatibilidade com versões anteriores em versões mais recentes de uma API.

Compatibilidade direta

Compatibilidade direta refere-se à capacidade de um consumidor existente de uma API de executar em uma versão mais antiga enquanto exibe o mesmo comportamento. Se um consumidor não puder executar ou se comportar de forma diferente quando executado em uma versão mais antiga da API, a API será incompatível.

A manutenção da compatibilidade direta praticamente impede quaisquer alterações ou adições de versão para versão, uma vez que essas alterações impedem que um consumidor destinado a uma versão posterior seja executado em uma versão anterior. Os desenvolvedores esperam que um consumidor que depende de uma API mais recente pode não funcionar corretamente em relação à API mais antiga.

Manter a compatibilidade direta não é um objetivo do .NET Core.