2009-09-04 8 views
16

ho una vista ASP MVC dove hanno la seguente dichiarazionevista asp.mvc enteres #IF DEBUG in configurazione di rilascio

#if DEBUG 
    //section 1 
    //do stuff 
#else 
    //section 2 
    //do other stuff 
#endif 

Quando in Visual Studio scelgo la configurazione di rilascio dal menu a discesa per fare la compilazione, la il codice passa ancora attraverso la sezione 1.

Nelle proprietà di configurazione della soluzione tutti i sottoprogetti della soluzione sono impostati sulla configurazione di rilascio.

Cosa non arrivo qui?

risposta

31

È importante capire che esistono due compilazioni completamente separate per il progetto. Il primo è quello che fai in Visual Studio. Il secondo è quello che ASP.NET fa appena prima che la pagina venga pubblicata. Se DEBUG all'interno della tua vista è fatto nel secondo passaggio. La build di rilascio che descrivi è il primo passo. Pertanto, l'impostazione di debug/release del tuo progetto non ha nulla a che fare con l'impostazione di debug in Web.config/il compilatore ASP.NET.

Inoltre, sarebbe del tutto inappropriato per la build di Visual Studio modificare le impostazioni di debug in Web.config. Queste sono due compilazioni separate e una non dovrebbe influenzare l'altra.

D'altra parte, probabilmente hai un'esigenza perfettamente ragionevole per fare in modo che la visualizzazione si comporti diversamente quando esegui il debug all'interno di Visual Studio e puoi farlo. Hai solo bisogno di spostare l'istruzione "if" al di fuori della vista e in qualcosa che è compilato da Visual Studio, invece di ASP.NET. Lo facciamo con un helper HTML. Ad esempio:

 /// <summary> 
     /// Returns the HTML to include the appropriate JavaScript files for 
     /// the Site.Master.aspx page, depending upon whether the assembly 
     /// was compiled in debug or release mode. 
     /// </summary> 
     /// <returns>HTML script tags as a multi-line string.</returns> 
     public static string SiteMasterScripts(this UrlHelper helper) 
     { 
      var result = new StringBuilder(); 
#if DEBUG 
      result.AppendFormat("<script src=\"{0}\" type=\"text/javascript\"></script>", helper.Content("~/Content/js/MicrosoftAjax.debug.js")); 
#else 
      result.AppendFormat("<script src=\"{0}\" type=\"text/javascript\"></script>", helper.Content("~/Content/js/MicrosoftAjax.js")); 
#endif 
     // etc. ... 

Questo include i file JS di debug durante l'esecuzione nella configurazione di debug in Visual Studio, ma minimizzato JS in caso contrario.

+1

Passaggio tra il minified e il full javascript/css era esattamente la ragione per cui stavo usando questo IF DEBUG. La ringrazio per la risposta. –

+0

È confuso perché Visual Studio mette in ombra il blocco di testo sbagliato. – ajbeaven

+1

+1 spiegazione molto buona su due compilatori. Ha senso ora. – ashes999

0

Controllare le impostazioni del progetto per assicurarsi che DEBUG non sia definito.

3

Impostare <compilation debug="false"> nel file web.config.

+0

questo non sembra funzionare? questo funziona per me: http://stackoverflow.com/questions/2951128/c-and-asp-net-mvc-using-if-directive-in-a-view/4509854#4509854 – russau

Problemi correlati