Comment dois-je écrire du code avec des sections uniques pour différentes versions de .NET

StackOverflow https://stackoverflow.com/questions/85773

  •  01-07-2019
  •  | 
  •  

Question

Mon code source doit prendre en charge les versions 1.1 et 2.0 de .NET. Comment puis-je tester les différentes versions & amp; quel est le meilleur moyen de faire face à cette situation.

Je me demande si je devrais avoir les deux sections de code en ligne, dans des classes, méthodes, etc. séparées. Qu'en pensez-vous?

Était-ce utile?

La solution

Si vous voulez faire quelque chose comme cela, vous devrez utiliser des commandes de pré-traitement et des symboles de compilation conditionnelle.

Je voudrais utiliser des symboles qui indiquent clairement la version de .NET que vous ciblez (par exemple, NET11 et NET20), puis envelopper le code approprié comme suit:

#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif

La raison de le faire ainsi plutôt qu'un simple if / else est une couche de protection supplémentaire au cas où quelqu'un oublierait de définir le symbole.

Cela étant dit, vous devriez vraiment aller au fond des choses pour lesquelles vous voulez / devez faire cela.

Autres conseils

Il y a beaucoup d'options différentes ici. Là où je travaille, nous utilisons #if pragmas, mais cela pourrait également être fait avec des assemblages séparés pour les versions séparées.

Idéalement, vous devriez au moins conserver le code dépendant de la version dans des fichiers de classe partiels séparés et rendre la version correcte disponible au moment de la compilation. J'appliquerais cela si je pouvais remonter dans le temps, notre base de code contient maintenant beaucoup de pragmas et si cela peut être difficile à gérer. Le pire aspect de la #fonction pragma est que Visual Studio ignore tout ce qui ne compilera pas avec les définitions actuelles, il est donc très facile d’archiver les changements apportés.

NUnit prend en charge les versions 1.1 et 2.0 et constitue donc un bon choix pour un cadre de test. Il n’est pas trop difficile d’utiliser quelque chose comme NAnt pour créer des versions 1.1 et 2.0 distinctes, puis exécuter automatiquement les tests NUnit. .

Je me poserais la question suivante: POURQUOI vous devez conserver deux bases de code? J'en choisirais une et l'utiliserais s'il y avait une chance que cela se produise.

Essayer de maintenir deux bases de code synchronisées avec le nombre de modifications, et les types de modifications seraient très complexes, et un processus de génération à créer pour l'une ou l'autre version serait très complexe.

Nous avons eu ce problème et nous nous sommes retrouvés avec une "couche de compatibilité". où nous avons implémenté un seul ensemble d’interfaces et de code d’utilitaire pour .NET v1.1 et v2.0.

Ensuite, notre installateur a défini le bon code pour la bonne version. Nous avons utilisé NSIS (gratuit!), Ainsi que des fonctions que vous pouvez appeler pour déterminer la version .NET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top