Motore di visualizzazione del razor, come inserire il preprocessore (debug #if)

Oggi sto scrivendo la mia prima pagina di razor, non riesco a capire come inserire #if debug #else #endif

Come posso inserire il preprocessore nel razor?

Ho appena creato un metodo di estensione:

 public static bool IsDebug(this HtmlHelper htmlHelper) { #if DEBUG return true; #else return false; #endif } 

Poi l’ho usato nelle mie opinioni in questo modo:

  

Poiché l’helper è compilato con il simbolo DEBUG / RELEASE, funziona.

Questo è incorporato in HttpContext :

 @if (HttpContext.Current.IsDebuggingEnabled) { // Means that debug="true" in Web.config } 

IMO, questo ha più senso della compilazione condizionale per le viste e risulta utile per alcuni scenari di test. (Vedi il commento di Code Chief sotto).


Nota a NullReferenceException : NullReferenceException per HttpContext.Current

Alex Angas ha affermato di aver ottenuto una NullReferenceException con questa soluzione, e alcune persone hanno upvoted indicando che questo potrebbe non essere un evento isolato.

La mia ipotesi migliore: HttpContext.Current è memorizzata in CallContext , il che significa che è accessibile solo dal thread che gestisce la richiesta HTTP in entrata. Se le tue viste sono state renderizzate su un thread diverso (forse alcune soluzioni per le viste precompilate?) Otterresti un valore null per HttpContext.Current .

Se ricevi questo errore, per favore fammi sapere nei commenti e menzioni se stai usando viste precompilate o qualcosa di speciale che potrebbe rendere le tue visualizzazioni parzialmente renderizzate / eseguite su un altro thread!

C # e ASP.NET MVC: utilizzo della direttiva #if in una vista

In realtà quella risposta ha la risposta giusta. Dovrai passare o meno se sei in modalità di debug tramite il Modello. (o ViewBag) poiché tutte le viste sono compilate in modalità di debug.

So che questa non è una risposta diretta alla domanda, ma siccome sono abbastanza sicuro che la configurazione del debug è corollario al fatto che si sta eseguendo localmente, si può sempre usare la proprietà Request.IsLocal come test di debug like. Quindi:

 @if (Request.IsLocal) {  } else {  } 

Per impostazione predefinita, le viste MVC non sono compilate, quindi # DEBUG non può funzionare in una vista. Se vuoi compilare la vista per accedere a IF DEBUG config, devi:

  1. Fare clic con il tasto destro del mouse sul progetto in Visual Studio
  2. Scarica il progetto
  3. Modifica progetto

cambia il seguente attributo da falso a vero

 true 

ricarica il tuo progetto e poi le viste saranno compilate.

L’unico altro modo di aggirare sarebbe avere una funzione nel codice

 public static Boolean DEBUG(this System.Web.Mvc.WebViewPage page) { var value = false; #if(DEBUG) value=true; #endif return value; } 

e quindi chiamalo dalla vista:

 if(DEBUG()) { //debug code here } else { //release code here } 

Per me, il codice qui sotto ha funzionato molto bene.

Quando l’applicazione è Debug, i miei pulsanti appaiono, quando è Release , non lo fanno.

 @if (this.Context.IsDebuggingEnabled) {   }