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
- Compatibilidade binária
- Compatibilidade da fonte
- Compatibilidade em tempo de design
- Compatibilidade com versões anteriores
- de compatibilidade do
Forward (não uma meta de )
Alteração comportamental
Uma alteração comportamental representa uma alteração no comportamento de um membro. A alteração pode estar visível externamente (por exemplo, um método pode gerar uma exceção diferente) ou pode representar uma implementação alterada (por exemplo, uma alteração na maneira como um valor retornado é calculado, a adição ou remoção de chamadas de método internas ou até mesmo uma melhoria significativa de desempenho).
Quando as alterações 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 de implementação são muito mais difíceis de avaliar; dependendo da natureza da alteração e da frequência e dos padrões de uso da API, o impacto de uma alteração pode variar de grave a inócuo.
Compatibilidade binária
A 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 alteração desse tipo é denominada alteração binária incompatível.
Compatibilidade de origem
A compatibilidade de origem refere-se à capacidade dos consumidores existentes de uma API de recompilar em uma versão mais recente sem alterações de origem. Uma alteração incompatível de origem ocorre quando um consumidor precisa modificar o código-fonte para que seja compilado com sucesso em uma versão mais nova de uma API.
Compatibilidade em tempo de desenvolvimento
A compatibilidade em design-time refere-se à preservação da experiência em design-time entre versões de Visual Studio e outros ambientes de design-time. Embora isso possa envolver o comportamento ou a interface do usuário dos designers, o aspecto 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 desenvolvimento.
Compatibilidade retroativa
A compatibilidade com versões anteriores refere-se à capacidade de um consumidor existente de uma API operar com uma nova versão enquanto se comporta da mesma maneira. Alterações comportamentais e alterações na compatibilidade binária afetam a compatibilidade com versões anteriores. Se um consumidor não conseguir executar ou se comportar de forma diferente ao executar na versão mais recente da API, a API será incompatível com versões anteriores.
As alterações que afetam a compatibilidade retroativa são desencorajadas, pois os desenvolvedores esperam compatibilidade retroativa em novas versões de uma API.
Compatibilidade com futuras versões
A compatibilidade futura refere-se à capacidade de um consumidor existente de uma API funcionar em uma versão mais antiga enquanto exibe o mesmo comportamento. Se um consumidor não conseguir executar ou se comportar de forma diferente quando executado em uma versão mais antiga da API, a API será encaminharincompatíveis.
A manutenção da compatibilidade futura praticamente impossibilita quaisquer alterações ou adições de uma versão para outra, já que essas alterações impedem que um usuário que visa uma versão posterior execute em uma versão anterior. Os desenvolvedores esperam que um consumidor que dependa de uma API mais recente não funcione corretamente em relação à API mais antiga.
Manter a compatibilidade futura não é uma meta de .NET.NET Aspire.