2010-06-09 4 views
2

J'écris une application qui a deux classes qui fournissent fondamentalement la même fonctionnalité mais pour des situations différentes. Je voudrais avoir trois versions du logiciel - une où l'utilisateur peut changer un fichier ini pour configurer le programme pour utiliser l'une des deux classes, puis une version qui utilise seulement l'une des deux classes.C# VS 2008 Configurations de construction - utilisation de différentes classes pour différentes générations

Actuellement, je l'ai fonctionné via un fichier ini, mais j'aimerais pouvoir créer des versions qui n'incluent pas le code pour la classe inutile.

Quelle est la meilleure façon de procéder? Ma ligne de pensée actuelle est que puisque les deux classes dérivent d'une interface commune, je vais juste ajouter une condition de compilation qui regarde la configuration de construction active et décide de compiler ou non cette classe. Quelle est la syntaxe pour le faire?

Merci d'avance pour votre aide et vos commentaires!

Répondre

1

Vous pouvez utiliser des symboles de compilation conditionnels, similaires à ce que vous feriez en C/C++ avec des directives de précompilateur.

Par exemple:

interface IThing { 
} 

#if PLATFORM_A 

class ThingImplementation : IThing { 
} 

#endif 

#if PLATFORM_B 

class ThingImplementation : IThing { 
} 

#endif 

Vous pouvez choisir la mise en œuvre de Desider en ajoutant un symbole de compilation conditionnelle à l'onglet « Build » dans les paramètres de votre projet. Pour une implémentation très basique, vous n'avez pas du tout besoin d'une interface, il suffit de supprimer le code inutile en fonction de la plate-forme que vous compilez (même si une interface est utile pour renforcer la cohérence).

class Thing { 

#if PLATFORM_A 

    Platform specific code 

#endif 

#if PLATFORM_B 

    Platform specific code 

#endif 

} 
+0

comment puis-je utiliser le type de construction comme symbole de compilation conditionnelle. par exemple sans ajouter de nouveaux types de construction, comment pourrais-je faire quelque chose comme si DEBUG ou si RELEASE. Merci pour votre réponse! – evan

+0

La constante DEBUG est ajoutée par Visual Studio lors de l'utilisation de la configuration de construction "Debug" par défaut. Par conséquent, vous pouvez utiliser #if DEBUG sans avoir à définir de symboles supplémentaires (notez que la configuration de release ne définit pas RELEASE, mais simplement ne définit pas DEBUG). Pour les symboles supplémentaires, vous devrez les ajouter manuellement aux configurations de construction que vous créez (dans l'onglet "Build" de votre projet VS). Je ne pense pas qu'il existe un moyen de vérifier le nom de la configuration de construction lors de l'utilisation des directives #if. – LorenzCK

1

Mieux vaut placer chaque classe dérivée dans son propre assemblage. Lors de l'exécution, chargez l'assembly qui est depoyed avec votre application et cast vers l'interface de base ou la classe abstraite.

+0

Donc maintenant j'ai une interface et deux classes dérivées. Vous pensez que je devrais retirer l'implémentation du code principal et le mettre dans deux assemblages, puis vérifier ceux qui sont en cours d'exécution? Comment ferais-je cela? Merci pour ton aide! – evan

+0

NM, je pense que je l'ai compris, merci! – evan

Questions connexes