5 votes

Définition de valeurs au moment de la compilation dans Visual Studio (C#) ?

Je travaille actuellement avec C# et je développe quelques applications Silverlight qui utilisent les services web Sharepoint comme sources de données.

Les administrateurs de Sharepoint ont décidé que pour "séparer" les utilisateurs, ils devaient créer plusieurs fois la même liste Sharepoint et accorder aux utilisateurs de chaque branche l'accès à la liste correspondante pour cette branche.

Cela crée un petit problème car je dois définir le guide pour les listes Sharepoint pour chaque branche, et compiler 5 versions différentes de la même application.

Finalement, j'ai décidé de créer un ListProperties et passer le nom de la branche courante à une méthode pour qu'elle retourne le bon guide.

Donc maintenant, je mets une variable (branche) à " BRANCH-A ", compilez et renommez l'application en "AppBranchA.xap". Puis faites la même chose pour chaque branche.

Existe-t-il un moyen de passer une chaîne de caractères au moment de la compilation et de faire en sorte que la variable (et, espérons-le, le nom de l'application également) soit modifiée automatiquement ?

Je suis prêt à entendre d'autres façons de gérer plusieurs constructions à la fois.

Merci,

3voto

Josh Points 6036

En supposant que vous utilisez VS 2010

Vous pouvez utiliser Configurations de construction avec le nom de la branche en conjonction avec Transformations de la configuration pour modifier la valeur. Il suffit ensuite de construire dans chaque configuration.

2voto

JaredPar Points 333733

Une façon d'aborder cette question est d'utiliser un symbole de compilation conditionnelle pour contrôler quelle GUID est utilisée pour définir les propriétés spécifiques à la branche. Par exemple

class ListProperties {

#if BRANCH-A
  public static readonly GUID BranchGuid = "Guid #1";
#endif

#if BRANCH-B
  public static readonly GUID BranchGuid = "Guid #2";
#endif

}

Cela vous permet de contrôler la valeur des définitions de branche en modifiant les symboles de préprocesseur définis sur la ligne de commande.

Une autre option serait d'utiliser un fichier de configuration pour stocker les données spécifiques à la branche. Vous pourriez alors construire l'application une fois et la déployer avec différents fichiers de configuration en fonction de la branche cible.

2voto

scottm Points 13578

Si vous utilisez des directives de précompilation, vous pouvez y parvenir.

#if BRANCH_A
 readonly Guid myId = new Guid("some guid");
#endif

#if BRANCH_B
 readonly Guid myId = new Guid("some other guid");
#endif

Si vous voulez être vraiment fantaisiste, vous pouvez même créer de nouvelles versions (plutôt que de simplement déboguer et publier). Ensuite, les directives correspondantes sont définies pour cette version.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X