Règles de compatibilité ascendante de la classe C # / évitant les changements brusques

Je travaille sur un assemblage C # 3.5 utilisé par de nombreuses applications différentes dans un environnement de serveur d’entreprise. J’aimerais append des propriétés à une classe C # existante (non abstraite) et conserver une compatibilité ascendante avec les clients actuels sans recomstackr. C’est un assemblage fortement nommé 3.5. Les applications clientes existantes ne seront pas recompilées. À la place, nous utilisons des assemblys de stratégies d’éditeur pour redirect les clients existants vers la version mise à jour.

Quelles sont les règles pour maintenir ce type de compatibilité ascendante de classe?

Je recherche un ensemble de règles sur lesquelles valider les modifications de code.

Après mes tentatives actuelles de mise à jour de la classe, les clients lisent une exception “La définition du manifeste de l’assembly localisé ne correspond pas à la référence de l’assembly”.

La meilleure référence est la réponse de Justin: un guide précis sur les modifications radicales des API dans .NET

@Justin – si vous postez ceci comme réponse, je vous remettrai le chèque.

Vous devez conserver la même version d’assembly (c’est-à-dire, ne l’incrémentez pas d’une génération à l’autre) – voir AssemblyVersionAtsortingbute dans MSDN .

En outre, vous pouvez exploiter les redirections de liaison d’assemblage, mais cela implique des modifications de fichiers de configuration que je ne pense pas souhaitables dans votre cas.

À ce stade, l’erreur que vous obtenez n’est pas liée à la compatibilité entre les classes, mais au problème de chargement de l’assemblage – voir La définition du manifeste de l’assemblage situé ne correspond pas à la référence de l’assemblage si elle aide.

L’ajout de propriétés / méthodes à la classe existante devrait être correct pour la compatibilité ascendante. Supprimer des champs / méthodes / propriétés, changer de classe en structure, changer de classe de base n’est certainement pas. Modifier les constantes, les valeurs enum est dangereux.