Cómo pueden afectar los cambios de código a la compatibilidad
compatibilidad hace referencia a la capacidad de compilar o ejecutar código en una versión de una implementación de .NET distinta de la con la que se desarrolló originalmente el código. Un cambio determinado puede afectar a la compatibilidad de seis maneras diferentes:
- Cambio de comportamiento
- Compatibilidad binaria
- Compatibilidad de origen
- Compatibilidad en tiempo de diseño
- compatibilidad con versiones anteriores
- Compatibilidad futura (no un objetivo de .NET.NET Aspire)
Cambio de comportamiento
Un cambio de comportamiento representa un cambio en el comportamiento de un miembro. El cambio puede ser visible externamente (por ejemplo, un método puede producir una excepción diferente) o puede representar una implementación modificada (por ejemplo, un cambio en la forma en que se calcula un valor devuelto, la adición o eliminación de llamadas a métodos internos o incluso una mejora significativa del rendimiento).
Cuando los cambios de comportamiento son visibles externamente y modifican el contrato público de un tipo, son fáciles de evaluar, ya que afectan a la compatibilidad binaria. Los cambios de implementación son mucho más difíciles de evaluar; dependiendo de la naturaleza del cambio y de la frecuencia y los patrones de uso de la API, el impacto de un cambio puede variar de grave a innocuo.
Compatibilidad binaria
La compatibilidad binaria hace referencia a la capacidad de un consumidor de una API para usar la API en una versión más reciente sin volver a compilar. Los cambios como agregar métodos o agregar una nueva implementación de interfaz a un tipo no afectan a la compatibilidad binaria. Sin embargo, quitar o modificar las firmas públicas de un ensamblado para que los consumidores ya no puedan acceder a la misma interfaz expuesta por el ensamblado afecta a la compatibilidad binaria. Un cambio de este tipo se denomina un cambio binario incompatible.
Compatibilidad de origen
La compatibilidad de origen hace referencia a la capacidad de los consumidores existentes de una API de volver a compilar en una versión más reciente sin cambios de origen. Un cambio incompatible con el código fuente se produce cuando un consumidor necesita modificar el código fuente para que pueda compilarse correctamente con una versión más reciente de una API.
Compatibilidad en tiempo de diseño
La compatibilidad en tiempo de diseño hace referencia a la conservación de la experiencia en tiempo de diseño entre versiones de Visual Studio y otros entornos en tiempo de diseño. Aunque esto puede implicar el comportamiento o la interfaz de usuario de los diseñadores, el aspecto más importante de la compatibilidad en tiempo de diseño se refiere a la compatibilidad del proyecto. Un proyecto o solución debe poder abrirse y usarse en una versión más reciente del entorno en tiempo de diseño.
Compatibilidad retroactiva
La compatibilidad con versiones anteriores hace referencia a la capacidad de un consumidor existente de una API de ejecutarse en una nueva versión mientras se comporta de la misma manera. Tanto los cambios de comportamiento como los cambios en la compatibilidad binaria afectan a la compatibilidad con versiones anteriores. Si un consumidor no puede ejecutar o se comporta de forma diferente cuando se ejecuta con la versión más reciente de la API, la API no es compatible con versiones anteriores.
No se recomienda realizar cambios que afecten a la compatibilidad con versiones anteriores, ya que los desarrolladores esperan compatibilidad con versiones anteriores de una API.
Compatibilidad futura
La compatibilidad hacia adelante hace referencia a la capacidad de un consumidor existente de una API para ejecutarse en una versión posterior mientras se muestra el mismo comportamiento. Si un consumidor no puede ejecutar o se comporta de forma diferente cuando se ejecuta en una versión anterior de la API, la API se reenviar incompatibles.
Mantener la compatibilidad hacia adelante prácticamente impide los cambios o adiciones entre versiones, ya que esos cambios impiden que un consumidor que apunte a una versión posterior se ejecute en una versión anterior. Los desarrolladores esperan que un consumidor que se base en una API más reciente no funcione correctamente con la API anterior.
Mantener la compatibilidad futura no es un objetivo de .NET.NET Aspire.