5

J'ai du mal à faire en sorte que Visual Studio se comporte comme je l'attendais. J'ai créé 2 profils de configuration. L'un a le symbole FOO défini et l'autre a le symbole BAR défini. Et je ce code:Les symboles de compilation conditionnelle ne sont pas définis

static class MyClass{ 
#if FOO 
    public static string const MyData="foo defined"; 
#endif 
#if BAR /*yes, I know #elif would work here too.. just trying to be simple*/ 
    public static string const MyData="bar defined"; 
#endif 
} 

, puis plus tard dans un autre fichier je

if(MyClass.MyData=="foo defined")..... 

Eh bien, dans ma demande, je reçois une erreur qui MyClass.MyData n'est pas défini.

Aussi, si je l'ai sur le profil FOO et tapez quelque chose comme #error test après le #if FOO alors il y aura une erreur de construction, mais si je l'enlève, il se construira très bien et quand je vais l'exécuter I ' J'obtiendrai une erreur de compilation indiquant que MyClass ne contient pas de définition pour MyData. En outre, il s'agit d'une application Web ASP.Net. Est-ce que quelqu'un peut m'aider à comprendre comment utiliser la compilation conditionnelle? Il agit comme si Visual Studio le compilait correctement avec les symboles de compilation, mais chaque fois que le serveur web ASP.Net l'exécute, il le recompile sans aucun symbole ... Mais cela n'a aucun sens pourquoi il le ferait ..

Editer: Peu importe si j'utilise le profil FOO ou BAR, aucun d'eux ne semble définir le symbole MyData comme ils le devraient.

EDIT2:

Ok, ce qui est important pour la reproduction !!! Créez un nouveau dossier App_Code dans votre solution, puis ajoutez-y un fichier .cs, puis ajoutez MyClass. Cela va reproduire le bug travaillant dans un projet vide. Je l'ai en fait simplifié vers le bas juste

#if !(FOO || BAR) 
    #error neither foo or bar defined 
#endif 

Il semble que Visual Studio ne symboles de compilation conditionnelle non communiqué pour les fichiers réguliers .cs intérieur de App_Code

+0

J'ai complètement changé ma réponse ... Vérifiez-le. –

Répondre

5

Depuis ASP.NET compile votre code en dehors de votre développement environnement, il utilise sa propre configuration de construction. Vous devez définir le symbole de compilation conditionnelle dans votre web.config, voir le lien ici: Conditional Compilation in ASP.NET 2.0

+0

C'est ce que j'ai fait. Dans le profil de configuration FOO, j'ai ajouté le symbole FOO et pour le profil BAR j'ai ajouté le symbole BAR – Earlz

+0

Bizarre, le problème doit se situer ailleurs, êtes-vous sûr que vous construisez réellement en utilisant la configuration correcte? –

+0

oui .. Comme je l'ai dit, il se construit sans lancer d'erreur, mais quand je lance le site web asp.net, il va charger une page Erreur de compilation – Earlz

Questions connexes