Ich schreibe heute meine erste Rasierseite und kann nicht herausfinden, wie ich eintreten soll #if debug #else #endif
Wie kann ich Präprozessor in Rasiermesser eingeben?
Ich schreibe heute meine erste Rasierseite und kann nicht herausfinden, wie ich eintreten soll #if debug #else #endif
Wie kann ich Präprozessor in Rasiermesser eingeben?
#if debug
in Rasiermesser wollen, aber es wird immer wahr sein. Die Antwort auf Ihre Frage lautet also, dass es keinen Sinn macht, dies zu tun, da Razor immer im Debug-Modus kompiliert wird.Antworten:
Ich habe gerade eine Erweiterungsmethode erstellt:
Dann benutzte es in meinen Ansichten so:
Da der Helfer mit dem DEBUG / RELEASE-Symbol kompiliert ist, funktioniert er.
quelle
public static bool IsDebug(...){ return true; }
und umgekehrt für den Nicht-DEBUG-Modus.Dies ist eingebaut in
HttpContext
:IMO, dies ist sinnvoller als die bedingte Kompilierung von Ansichten und für einige Testszenarien nützlich. (Siehe Tony Walls Kommentar unten.)
Randnotiz:
NullReferenceException
fürHttpContext.Current
Alex Angas erwähnte, dass sie
NullReferenceException
mit dieser Lösung eine Lösung finden, und einige Leute haben sich dafür ausgesprochen, dass dies möglicherweise kein Einzelfall ist.Meine beste Vermutung:
HttpContext.Current
wird in gespeichertCallContext
, was bedeutet, dass nur der Thread darauf zugreifen kann, der die eingehende HTTP-Anforderung verarbeitet. Wenn Ihre Ansichten in einem anderen Thread gerendert werden (möglicherweise einige Lösungen für vorkompilierte Ansichten?), Erhalten Sie einennull
Wert fürHttpContext.Current
.Wenn Sie diesen Fehler erhalten, lassen Sie es mich bitte in den Kommentaren wissen und erwähnen Sie, ob Sie vorkompilierte Ansichten oder spezielle Einstellungen verwenden, die dazu führen könnten, dass Ihre Ansichten teilweise in einem anderen Thread gerendert / ausgeführt werden!
quelle
System.Web
Version 4.0.0.0) erstellt, und selbst wenn dasdebug
Attribut (oder tatsächlich das gesamtecompilation
Element) entfernt wurde, erhalte ich keine Ausnahme. Mein nächstes Die besten Hypothesen sind, dass dies ein Fehler ist, der in späteren Versionen derSystem.Web
Assembly behoben wurde, oder dass Ihre spezifische Situation etwas anderes ist, das mir nicht bekannt ist. Könnten Sie ein minimales Testprojekt erstellen und es irgendwo hochladen?C # und ASP.NET MVC: Verwenden der Direktive #if in einer Ansicht
Eigentlich hat diese Antwort die richtige Antwort. Sie müssen über das Modell übergeben, ob Sie sich im Debug-Modus befinden oder nicht. (oder ViewBag), da alle Ansichten im Debug-Modus kompiliert werden.
quelle
// your debug stuff
Ich weiß, dass dies keine direkte Antwort auf die Frage ist, aber da ich ziemlich sicher bin, dass die Debug-Konfiguration mit der Tatsache zusammenhängt, dass Sie tatsächlich lokal ausgeführt werden, können Sie die
Request.IsLocal
Eigenschaft immer als Debug-ähnlichen Test verwenden. Also:quelle
Meine Lösung ist sehr dumm, aber es funktioniert. Definieren Sie eine globale Konstante irgendwo in einer statischen Datei:
Verwenden Sie es dann mit Razor in HTML:
quelle
Standardmäßig werden MVC-Ansichten nicht kompiliert, sodass #IF DEBUG in einer Ansicht nicht funktionieren kann. Wenn Sie die Ansicht kompilieren möchten, um auf die IF DEBUG-Konfiguration zuzugreifen, müssen Sie:
Ändern Sie das folgende Attribut von false in true
Laden Sie Ihr Projekt neu und dann werden Ansichten kompiliert.
Die einzige andere Möglichkeit wäre, eine Funktion in Ihrem Code zu haben
und dann aus der Sicht aufrufen:
quelle
Für mich hat der folgende Code sehr gut funktioniert.
Wenn die Anwendung debuggt, werden meine Schaltflächen angezeigt, wenn Release ist , werden sie nicht angezeigt .
quelle
Dies funktioniert bei mir in einem White-Label-Projekt .net Core 3.0
quelle
In .NET Core können Sie Folgendes tun, anstatt die Präprozessorvariablen zu überprüfen:
quelle