8
votes

Le préprocesseur en C # ne fonctionne pas correctement

#if(DEBUG)
    ......Code......
#else
    ......Code......
#endif
I have some code like this. If my application is running in Debug mode it should execute the #if(DEBUG) part, if it is running in Release mode it should execute the #else part. However, it is only executing the #if(DEBUG) part no matter which mode it is running in.Am using WPF application with VS2010Can anyone help me?

3 commentaires

Je suppose que je suppose et dire que votre configuration d'exécution n'est pas précisément comme prévu. Où changez-vous le type de configuration? La barre d'outils standard, le gestionnaire de configuration de la solution Propriétés?


Dans l'IDE, il grise le code dans la section de débogage lorsque vous choisissez le mode de sortie?


Yah il est grisé pour le mode de libération


5 Réponses :


0
votes

Je suppose que dans vos propriétés de projet, sous la construction, vous avez vérifié Définir la constante de débogage .

Essayez de définir le mode de configuration sur Relâchez et exécutez votre application à nouveau. Par défaut pour Libération est que la constante de débogage n'est pas définie, si vous n'avez pas altéré si bien sûr;)

Si Définir la constante de débogage est pas sur vérifié, cela signifie que vous avez un #define debug caché quelque part.

Donc deux choses à faire. Vérifiez la constante dans les options sous le mode de sortie et recherchez une constante définie manuellement. Ce devrait être l'un de ceux-ci.


4 commentaires

Son problème est que débogage est exécutant, seulement tout le temps.


Oui. Il est exécutant car la constante de débogage est définie dans les paramètres du projet. Je suppose qu'il croit que cela ne devrait pas être exécuté à moins que ne soient explicitement définis #define débogage lui-même, mais il devra être exécuté en mode de libération, ou décochez cette option pour celui-ci à pas Exécuter. Lisez ma réponse à nouveau ...


Le OP ne savait pas que la constante doit être définie. Sinon, le sujet ne serait pas le prétraiteur en C # ne fonctionne pas . Ensuite, ce serait Vous ne pouvez pas savoir où la constante de débogage est définie . Fondamentalement, la seule réponse à laquelle chacun peut donner est de lui assurer que la constante est définie quelque part afin qu'il puisse le rechercher, de l'avoir envoyé, envoyez-moi le code et recherchez la constante pour lui.


Mais je suppose que nous n'accepterons pas cela, et c'est bien. Nous sommes autorisés à avoir des opinions différentes.



0
votes

Pourquoi mettez-vous débogué entre parenthèses? XXX


2 commentaires

L'utilisation de parens comme celle-ci est légale et non la question ici, aussi étrange qu'elle a l'air. La question peut être le manque d'espace après la directive #if .


@Oded - Nope, qui est autorisé aussi.



17
votes

Pour la configuration de débogage, vos paramètres de projet doivent ressembler à

Entrez la description de l'image ici

Pour la libération, ils devraient ressembler à ceci

Entrez la description de l'image ici

Pouvez-vous vérifier que c'est le cas, et laissez-nous savoir si c'est?
Sinon, qu'est-ce qu'il y a pour chaque configuration?


6 commentaires

J'ai la même chose dans mes paramètres de projet également. Mais il n'est toujours pas exécutant correctement.


Recherchez votre code pour #define des instructions, vérifiez l'une d'entre elles définissant débogage . Sinon, essayez de définir votre propre constante de débogage mydebug ou quelque chose, ne le mettez pas dans les paramètres du projet et voyez si votre agence d'autre exécute.


Si quelqu'un a plusieurs env Conférez-la définie dans les symboles de compilation conditionnelle définis, par exemple si vous souhaitez utiliser #if uat , assurez-vous que la construction a une uat dans la zone de texte.


Pour une raison quelconque, cela ne fonctionnait pas pour moi, j'ai vérifié Définir la constante de débogage en libération, puis non contrôlée et c'est bien maintenant.


Je décochez la possibilité de définir debug constante lorsque le projet est en mode de libération. C'est le travail pour moi, merci!


@ Ivan-san: Visual Studio - Par défaut - vous donne deux configurations de construction différentes pour le débogage et la libération, vous ne devriez pas avoir à modifier manuellement des indicateurs pour basculer entre.



4
votes

Créez un nouveau projet à l'aide de tous les paramètres par défaut et vérifiez que vous pouvez effectuer ce travail comme prévu. Si tel est le cas, votre projet de problème doit être «corrompu» d'une certaine manière, peut-être en définissant la constante de débogage dans la configuration de libération ou en disposant de la configuration du projet de débogage sélectionné pour la configuration de la solution de version.


0 commentaires

2
votes

Cela dépend de la manière dont vous créez vos configurations. Par exemple, si vous créez votre configuration et utilisez le débogage ou la libération comme un débogage ou une libération de modèle sera copié dans l'élément de contraintes défini. Il ne changera pas l'élément de contraintes défini (dans le fichier de projet) au nouveau nom de configuration.

Ouvrez le fichier de projet et recherchez les sections de configuration. Assurez-vous que la plate-forme, l'exemple ci-dessous est "PROD" a une entrée dans l'élément définieconstants. Si les directives de pré-compilateur ne fonctionnent pas comme prévu dans le code. P>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PROD|x86'">
  <DefineConstants>PROD;TRACE</DefineConstants>
    <OutputPath>bin\x86\PROD\</OutputPath>
  </PropertyGroup>


0 commentaires