11 votes

Est-il possible d'utiliser des symboles de compilation conditionnelle dans les événements de compilation de VS ?

Disons par exemple que j'ai un projet Visual Studio avec une configuration appelée "MyConfig" et que j'ai le symbole de compilation MY_CONFIG_SYMBOL définis.

Existe-t-il une macro ou une commande permettant de vérifier si MY_CONFIG_SYMBOL est défini dans les événements avant/après la construction ? Quelque chose comme #if MY_CONFIG_SYMBOL mais pour l'événement de construction ?

11voto

Mike Webb Points 3654

J'ai enfin trouvé une réponse. Ce qui suit fonctionne parfaitement :

if "$(DefineConstants.Contains('DEBUG'))" == "True" <command>

Cela fonctionne pour toutes les constantes définies dans la compilation, mais notez que la constante est sensible à la casse ('DEBUG' != 'Debug').

0voto

Ken Cenerelli Points 550

Si vous voulez parler des constructions conditionnelles basées sur les types de construction (Debug ou Release), alors oui. Consultez ces fils de discussion :

Evénement conditionnel de post-construction dans Visual Studio 2008

Comment exécuter les événements post-construction de Visual Studio pour la version de débogage uniquement ?

0voto

Erik Eidt Points 1397

Il ne s'agit pas d'une solution, mais d'une tentative de faire progresser l'état de la question en partageant quelques expériences. (Je n'ai pas encore trouvé le moyen de tester les symboles de compilation conditionnelle).

Il s'agit d'un moyen de consolider l'activation et la désactivation du débogage :

<#@ include file="debug.incl" #>`

some text1
<# if ( xdebug ) { #>
    foo = bas;
<# } #>
more text

Où se trouve le fichier debug.incl :

<# 
bool xdebug = true;
#>

Le conditionnel (if) dans le premier fichier est capable de voir la valeur de xdebug, de sorte que la sortie est modifiée en fonction de la configuration de xdebug dans debug.incl.

Malheureusement, les fichiers de sortie ne sont pas reconstruits en cas de modification du fichier debug.incl, malgré l'inclusion évidente de ce dernier. Et même un nettoyage et une reconstruction ne semblent pas déclencher la génération, donc une construction séparée est nécessaire pour cela...

(J'ai essayé debug.tt au lieu de debug.incl sans succès, j'ai changé pour .incl afin que debug.cs ne soit pas créé par debug.tt).


Cela n'a pas très bien fonctionné car il ne voit pas les symboles de compilation conditionnelle, alors qu'il active l'attribut de débogage du modèle !

<#
#if DEBUG 
bool xdebug = true;
#else
bool xdebug = false;
#endif
#>

some text1
<# if ( xdebug ) { #>
    foo = bas;
<# } #>
more text

avec <#@ template debug="true" #> vs. <# template debug=false #> vous obtenez la sortie conditionnelle ou non, respectivement.

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