2009-09-04 5 views
16

J'ai une vue MVC ASP où ont fait la déclaration suivantevue asp.mvc enteres #IF DEBUG dans la configuration de libération

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

Quand en studio visuel je choisis la configuration de sortie dans le menu déroulant pour faire la construction, la le code passe toujours à travers la section 1.

Dans les propriétés de configuration de la solution, tous les sous-projets de la solution sont définis sur la configuration de libération.

Qu'est-ce que je ne reçois pas ici?

Répondre

31

Il est important de comprendre qu'il existe deux compilations entièrement séparées pour votre projet. Le premier est celui que vous faites dans Visual Studio. La seconde est celle que fait ASP.NET juste avant que la page ne soit servie. Le si DEBUG à l'intérieur de votre vue est fait dans la deuxième étape. La version que vous décrivez est la première étape. Par conséquent, le paramètre de débogage/édition de votre projet n'a rien à voir avec le paramètre de débogage dans Web.config/le compilateur ASP.NET.

En outre, il serait totalement inapproprié pour votre version de Visual Studio de modifier le paramètre de débogage dans Web.config. Ce sont deux compilations séparées, et l'une ne devrait pas affecter l'autre. D'autre part, vous avez probablement un besoin parfaitement raisonnable de faire en sorte que votre vue se comporte différemment lorsque vous déboguez dans Visual Studio, et vous pouvez le faire. Vous avez juste besoin de déplacer l'instruction "if" en dehors de la vue et dans quelque chose qui est compilé par Visual Studio, au lieu de ASP.NET. Nous faisons cela avec un assistant HTML. Par exemple:

 /// <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. ... 

Cela inclut les fichiers de débogage JS lors de l'exécution dans la configuration de débogage dans Visual Studio, mais réduite au minimum JS autrement.

+1

Commutation entre le minifié et le full javascript/css était exactement la raison pour laquelle je l'utilisais IF DEBUG. Merci pour votre réponse. –

+0

Il est rendu confus car Visual Studio grise le mauvais bloc de texte. – ajbeaven

+1

+1 très bonne explication sur deux compilateurs. Cela a du sens maintenant. – ashes999

0

Vérifiez les paramètres de votre projet pour vous assurer que DEBUG n'est pas défini.

3

Définissez <compilation debug="false"> dans votre fichier web.config.

+0

cela ne semble pas fonctionner? cela fonctionne pour moi: http://stackoverflow.com/questions/2951128/c-and-asp-net-mvc-using-if-directive-in-a-view/4509854#4509854 – russau

Questions connexes