web-dev-qa-db-fra.com

Est-ce que #if RELEASE fonctionnera comme #if DEBUG en C #?

Dans tous les exemples que j'ai vus de la directive #if du compilateur, ils utilisent "DEBUG". Puis-je utiliser "RELEASE" de la même manière pour exclure du code que je ne souhaite pas exécuter en mode débogage? Le code que je veux entourer avec ce bloc envoie beaucoup de courriels et je ne veux pas les envoyer accidentellement lors des tests.

245
Brian Sullivan

Non, ce ne sera pas le cas, à moins que vous ne travailliez.

La partie importante ici est ce que DEBUG est vraiment, et c’est une sorte de constante définie que le compilateur peut vérifier.

Si vous vérifiez les propriétés du projet, sous l'onglet Construire, vous trouverez trois choses:

  • Une zone de texte intitulée "Symboles de compilation conditionnels"
  • Une case à cocher intitulée "Définir la constante DEBUG"
  • Une case à cocher intitulée "Définir constante TRACE"

Il n’existe pas de case à cocher, ni de constante/symbole prédéfini portant le nom RELEASE.

Cependant, vous pouvez facilement ajouter ce nom à la zone de texte intitulée Symboles de compilation conditionnelle, mais assurez-vous de définir la configuration du projet sur le mode de publication avant de le faire, car ces paramètres sont définis par configuration.

Donc, à moins que vous ajoutiez cela à la zone de texte, #if RELEASE ne produira de code sous aucune configuration.

249

RELEASE n'est pas défini, mais vous pouvez utiliser 

#if (!DEBUG)
  ...
#endif
356
M4N

Nan. 

Dans la configuration de débogage, il existe une constante DEBUG définie (définie automatiquement par Visual Studio), mais aucune constante de ce type n'est définie pour le mode de publication. Vérifiez les paramètres de votre projet sous build.

Sélectionner [Définir constante DEBUG] sous Projet -> Construire revient à inclure #define DEBUG au début de chaque fichier. 

Si vous souhaitez définir une constante RELEASE pour la configuration de la version, accédez à:

  • Propriétés du projet -> Construire
  • Sélectionnez le mode de libération
  • dans la zone de texte Symboles de compilation conditionnels, entrez: RELEASE
33
Pop Catalin

Sur mon installation VS (VS 2008), #if RELEASE ne fonctionne pas. Cependant, vous pouvez simplement utiliser #if !DEBUG

Exemple:

#if !DEBUG
SendTediousEmail()
#endif
23
JaredPar

Je n'ai jamais vu ça auparavant ... mais j'ai vu:

#if (DEBUG == FALSE)

et

#if (!DEBUG)

Ce travail pour toi?

9
Pete H.

Vous pouvez utiliser #if(!DEBUG) à cette fin.

6
Abdus Salam Azad

"Pop Catalin" a eu raison. Contrôler la définition en fonction du type de construction offre une grande flexibilité. Par exemple, vous pouvez avoir une configuration "DEBUG", "DEMO" et "RELEASE" dans la même solution. Cela évite le besoin de dupliquer la programmation avec deux solutions différentes.

Donc oui #if RELEASE ou #if (RELEASE) fonctionne de la même manière que #if DEBUG lorsque le symbole de compilation RELEASE Conditional est défini.

Ce qui suit est extrait de "Pop Catalin" post: * Projet Propriétés -> Construire * Sélectionnez le mode de libération * dans la zone de texte Symboles de compilation conditionnels, entrez: RELEASE

4
Steve L

Je sais que la question est ancienne, mais il convient de mentionner que vous pouvez créer vos propres configurations en dehors de DEBUG et de RELEASE, telles que TEST ou UAT. 

Si ensuite, dans l'onglet Construction de la page des propriétés du projet, définissez les "Symboles de compilation conditionnels" sur TEST (par exemple), vous pouvez ensuite utiliser une construction telle que 

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

Vous pouvez utiliser cette construction pour des raisons spécifiques, par exemple différents clients si vous en avez le besoin, ou même des méthodes Web entières par exemple. Nous avons également utilisé cela par le passé, lorsque certaines commandes posaient des problèmes pour un matériel spécifique. Nous avons donc une configuration pour une application déployée sur le matériel X.

1
Fetchez la vache

Vous pouvez créer vos propres symboles conditionnels au moment de la compilation (le nom de votre choix) . Allez dans la boîte de dialogue "Construire le projet" située dans la boîte de dialogue Propriétés du projet, option de menu : Projet -> [nom du projet] Propriétés. ..

Vous pouvez également les définir "en haut du fichier de code C #". Comme:

#define RELEASE
// or
#undef RELEASE

vous pouvez utiliser le symbole dans une instruction #if:

#if RELEASE
// code ...
#Elif …
// code ...
#endif

// or

#if !RELEASE
// code ...
#endif
0
King Coffee