J'écris ma première page de rasoir aujourd'hui, je ne sais pas comment entrer #if debug #else #endif
Comment puis-je entrer le préprocesseur dans le rasoir?
J'écris ma première page de rasoir aujourd'hui, je ne sais pas comment entrer #if debug #else #endif
Comment puis-je entrer le préprocesseur dans le rasoir?
#if debug
rasoir, mais ce sera toujours vrai. Donc, la réponse à votre question est qu'il n'y a aucun intérêt à le faire car Razor compilera toujours en mode débogage.Réponses:
Je viens de créer une méthode d'extension:
Ensuite, je l'ai utilisé dans mes vues comme ceci:
Puisque l'assistant est compilé avec le symbole DEBUG / RELEASE, cela fonctionne.
la source
public static bool IsDebug(...){ return true; }
, et vice versa pour le mode non DEBUG.Ceci est construit pour
HttpContext
:OMI, cela a plus de sens que la compilation conditionnelle pour les vues et est pratique pour certains scénarios de test. (Voir le commentaire de Tony Wall ci-dessous.)
Note latérale:
NullReferenceException
pourHttpContext.Current
Alex Angas a mentionné qu'ils obtiennent un
NullReferenceException
avec cette solution, et quelques personnes ont voté pour indiquer que ce n'est peut-être pas un événement isolé.Ma meilleure estimation:
HttpContext.Current
est stocké dansCallContext
, ce qui signifie qu'il n'est accessible que par le thread qui gère la demande HTTP entrante. Si vos vues sont rendues sur un thread différent (peut-être des solutions pour les vues précompilées?), Vous obtiendrez unenull
valeur pourHttpContext.Current
.Si vous obtenez cette erreur, faites-le moi savoir dans les commentaires et mentionnez si vous utilisez des vues précompilées ou quelque chose de spécial qui pourrait entraîner le rendu / exécution partiel de vos vues sur un autre thread!
la source
System.Web
version 4.0.0.0), et même avec l'debug
attribut (ou, en fait, l'compilation
élément entier ) supprimé, je ne reçois pas d'exception. Mon prochain les meilleures hypothèses sont qu'il s'agit d'un bogue qui a été corrigé dans les versions ultérieures de l'System.Web
assembly ou qu'il y a quelque chose de différent dans votre situation spécifique que je ne connais pas. Pourriez-vous créer un projet de test minimal et le télécharger quelque part?C # et ASP.NET MVC: utilisation de la directive #if dans une vue
En fait, cette réponse a la bonne réponse. Vous devrez passer si vous êtes ou non en mode débogage via le modèle. (ou ViewBag) car toutes les vues sont compilées en mode débogage.
la source
// your debug stuff
Je sais que ce n'est pas une réponse directe à la question, mais comme je suis presque sûr que la configuration de débogage est corollaire du fait que vous exécutez réellement localement, vous pouvez toujours utiliser la
Request.IsLocal
propriété comme test de débogage. Donc :la source
Ma solution est très stupide, mais ça marche. Définissez une constante globale quelque part dans un fichier statique:
Ensuite, utilisez-le avec Razor en HTML:
la source
Par défaut, les vues MVC ne sont pas compilées, donc #IF DEBUG ne peut pas fonctionner dans une vue. Si vous souhaitez compiler la vue pour accéder à la configuration IF DEBUG, vous devez:
changer l'attribut suivant de faux à vrai
rechargez votre projet et les vues vont être compilées.
La seule autre solution consiste à avoir une fonction dans votre code derrière
puis appelez-le de vue:
la source
Pour moi, le code ci-dessous a très bien fonctionné.
Lorsque l'application est en train de déboguer, mes boutons apparaissent, quand est Release , ils ne le font pas.
la source
Cela fonctionne pour moi dans un projet en marque blanche .net core 3.0
la source
Dans .NET Core, vous pouvez effectuer les opérations suivantes au lieu de vérifier les variables du préprocesseur:
la source