Pregunta Reglas para compatibilidad hacia atrás de la clase C # / evitar cambios bruscos


Estoy trabajando en un ensamblado C # 3.5 que es consumido por muchas aplicaciones diferentes en un entorno de servidor empresarial. Me gustaría agregar algunas propiedades a una clase C # existente (no abstracta) y mantener la compatibilidad con clientes actuales sin recompilar. Es un ensamble de nombre fuerte 3.5. Las aplicaciones cliente existentes no se volverán a compilar. En su lugar, utilizamos ensamblajes de políticas de editores para redirigir los clientes existentes a la versión actualizada.

¿Cuáles son las reglas para mantener este tipo de compatibilidad con versiones anteriores?

Estoy buscando un conjunto de reglas con las que pueda validar mis cambios de código.

Después de mis intentos actuales de actualizar la clase, los clientes lanzan una excepción "La definición del manifiesto del conjunto localizado no coincide con la referencia de ensamblaje".


22
2018-02-22 22:42


origen


Respuestas:


Debe mantener la misma versión de ensamblaje (es decir, no aumentarla en las compilaciones): consulte la AssemblyVersionAttribute en MSDN.

Además, podría aprovechar los redireccionamientos vinculantes de ensamblaje, pero eso implica cambios en el archivo de configuración que no espero sean deseables en su caso.


2
2018-02-22 22:50



En su punto, el error que está obteniendo no está relacionado con la compatibilidad entre clases, sino más bien con el problema al cargar el ensamblaje - ver La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje si ayuda.

Agregar propiedades / métodos a la clase exisitng debería ser correcto para compatibilidad con versiones anteriores. Eliminar campos / métodos / propiedades, cambiar de clase a estructura, cambiar la clase base definitivamente no lo es. La modificación de constantes, valores enum es peligroso.


2
2018-02-22 22:55



La mejor referencia es la respuesta de Justin: Una guía definitiva para los cambios que rompen la API en .NET

@Justin - si alguna vez publica esto como respuesta, le daré el cheque.


2
2017-10-13 19:33