2009-05-11 7 views
3

Nous développons deux versions d'une application. Pas dans le sens d'une version standard de l'application, où une version aura des fonctionnalités limitées, etc. Nous afficherons différents types d'informations dans l'application, selon la version (c'est la meilleure façon de le décrire sans entrer dans trop de détails).Pouvez-vous inclure uniquement certaines formes lors d'une compilation?

Pour différencier les deux versions de l'application, nous avons envisagé d'utiliser l'attribut conditionnel et la directive #if (s'il y a d'autres options ou une meilleure façon que celles-ci, je suis ouvert aux suggestions). Après quelques recherches et débats, nous avons décidé d'utiliser l'approche #if, car cela n'inclut pas le code inutile pendant le processus de compilation (alors que l'attribut conditionnel supprimera simplement les appels aux méthodes qui ne répondent pas à la condition, mais toujours inclure les méthodes ... si je ne me trompe pas). Je réalise que les deux ne sont pas mutuellement exclusifs, donc nous pourrions toujours mélanger et assortir si nécessaire.

De toute façon ... Ce que nous nous demandons maintenant, c'est s'il y a un moyen de seulement inclure certaines formes de fenêtres au cours d'une compilation, selon la version de l'application que nous sommes en train de compiler. Nous avons séparé toute la logique, de sorte que les formulaires ne sont en réalité que des formulaires, avec très peu de code à l'intérieur (principalement des appels à des classes de formateurs gérant toute la logique métier). Les classes du gestionnaire de formulaires contiendront certaines des instructions #if à l'intérieur d'elles, donc le code peut être réutilisé dans les deux versions de l'application, si possible (au lieu de faire deux classes et de mettre un attribut conditionnel sur les classes ... c'est quelque chose que nous devrions considérer).

Quelqu'un est-il au courant d'un bon moyen de le faire?

TIA

MISE À JOUR:

Juste un FYI de ce que nous avons décidé de le faire en fait. Nous avons placé les différentes versions des formulaires dans des espaces de noms distincts et n'avons ensuite eu qu'à utiliser une instruction #if autour de l'espace de noms en utilisant l'instruction en haut de la classe qui gère tous les formulaires. Travaillé assez lisse et était très petit travail.

+0

Pourquoi ne pas mettre simplement l'ensemble de la classe 'Form' dans une condition si? –

+0

bonne idée aussi ... –

+0

Devrions-nous faire cela pour chacun des fichiers de classe partielle (comme ceux qui sont créés par le concepteur avec tout le code de composant Windows, etc.)? –

Répondre

3

Je fais cela avec des projets de bibliothèque. Je produis un autre projet (.csproj), puis j'intègre dans ce projet les sources existantes. Dans VS2008, faites un clic droit sur le nouveau projet, cliquez sur ajouter un élément existant ... puis au lieu de cliquer sur Ajouter, utilisez la flèche de sélection pour sélectionner "Ajouter comme lien".

Plutôt que de dupliquer les modules source, Ajouter comme lien comprendra une référence à la source existante, dans le nouveau projet.De cette façon, vous pouvez avoir N projets, chacun avec une combinaison différente de modules source. J'utilise ceci de concert avec les instructions #if dans la source des modules communs pour produire différentes versions d'une bibliothèque.

Add Existing Item http://www.freeimagehosting.net/uploads/th.eff09391e9.png full image

Add as Link http://www.freeimagehosting.net/uploads/th.f12b764887.png full image

3

Une autre façon d'y parvenir est d'utiliser l'héritage OO: mettre une fonctionnalité commune aux deux versions dans une superclasse, puis créer des sous-classes distinctes qui définissent les spécialisations de la superclasse pour chacune de vos versions.

Vous pouvez ensuite créer votre superclasse [es] en tant que bibliothèque partagée et créer chaque sous-classe spécialisée dans des assemblages distincts (qui font référence à la bibliothèque partagée commune). Cela ne nécessite aucune compilation conditionnelle ni aucune option de construction conditionnelle.

+0

Nous devrons peut-être prendre cette route ... nous ne nous sommes pas vraiment rendu compte que nous allions avoir deux versions de l'application jusqu'à ce que nous soyons bien dans le processus de codage. J'espérais qu'il y aurait un moyen plus facile, bien que cela ne soit pas difficile puisque nous avons conçu notre logique de manière modulaire. –

+0

Cela fonctionne pour tout sauf les changements d'interface utilisateur dans le concepteur visuel entre les formulaires. –

1

La solution proposée par ChrisW est probablement la bonne façon de le faire. Cependant, cela peut impliquer beaucoup de changements dans votre conception, alors en voici une autre: au lieu d'avoir plusieurs configurations pour le même projet, créez un autre projet avec les mêmes sources. Pour ce faire, le plus simple est de créer une copie de votre fichier .csproj et de l'inclure dans la solution

Questions connexes