Question

Existe-t-il des symboles de préprocesseur permettant quelque chose comme

#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif

ou un autre moyen de le faire?

Était-ce utile?

La solution

Je ne pense pas qu'il existe des symboles de préprocesseur prédéfinis. Cependant, vous pouvez réaliser ce que vous voulez comme ceci:

  1. Créez différentes configurations de votre projet, une pour chaque version de CLR que vous souhaitez prendre en charge.

  2. Choisissez un symbole tel que VERSION2 , VERSION3 etc. par version CLR.

  3. Dans chaque configuration, définissez le symbole qui lui est associé et définissez tous les autres.

  4. Utilisez ces symboles dans les blocs de compilation conditionnelle.

Autres conseils

Il n'y en a pas intégré, mais vous pouvez fournir le vôtre.

Pour ce scénario spécifique, vous souhaiterez peut-être encapsuler la logique dans (par exemple) une classe wrapper (lock), afin de ne pas avoir #if dispersé dans tout le code; bien sûr, si vous ne faites que verrouiller un peu, cela ne vaut peut-être pas la peine.

J'utilise différentes configurations et / ou projets pour créer différentes plates-formes, à savoir protobuf- net construit pour .NET 2.0, .NET 3.0, mono, CF 2.0, CF 3.5 utilisant cette astuce. Le code comporte des blocs #if basés sur différents symboles pour contrôler la logique - ainsi, par exemple, BinaryFormatter n'est pas disponible sur CF, WCF est disponible uniquement avec .NET 3.0, Delegate.CreateDelegate n’est pas disponible dans CF 2.0, etc.

Vous pouvez utiliser la réflexion pour vérifier de manière dynamique si un certain type tel que ReaderWriterLockSlim est disponible (au lieu d'utiliser le préprocesseur).

Cela vous donnerait l’avantage de pouvoir déployer une version unique de votre produit et que les utilisateurs disposant de (ou mettant à jour) leur compte .NET 3.5 bénéficieront du code optimisé.

Vous pouvez définir manuellement ce symbole à l'aide du / define commutateur de compilateur . Ensuite, vous créez différentes configurations de construction pour chaque version de clé souhaitée.

Si c'est tout ce que vous deviez faire, je suppose que vous pourriez utiliser Environment.Version, mais comme de la divo , il semble y laisser beaucoup de code inutile.

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