2009-09-04 14 views
16

Mam widoku ASP MVC gdzie mają następujący komunikatasp.mvc widok wprowadzana jest #if DEBUG w konfiguracji uwolnienia

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

Kiedy w visual studio mam wybrać konfigurację zwalniającą z listy rozwijanej zrobić kompilacji, kod nadal przechodzi przez sekcję 1.

We właściwościach konfiguracyjnych rozwiązania wszystkie podprojekty rozwiązania są ustawione na konfigurację wydania.

Czego nie mam tutaj?

Odpowiedz

31

Ważne jest, aby zrozumieć, że istnieją dwa, całkowicie oddzielne kompilacje dla twojego projektu. Pierwszy to ten, który robisz w Visual Studio. Drugi to ten, który ASP.NET robi tuż przed wyświetleniem strony. Jeśli DEBUG wewnątrz twojego widoku jest wykonywany w drugim kroku. Wydanie, które opisujesz, jest pierwszym krokiem. Dlatego ustawienie debugowania/zwolnienia projektu nie ma nic wspólnego z ustawieniem debugowania w pliku Web.config/kompilatorze ASP.NET.

Co więcej, byłoby całkowicie niewłaściwe, aby kompilacja Visual Studio zmieniła ustawienia debugowania w pliku Web.config. Są to dwie oddzielne kompilacje i jedna nie powinna wpływać na drugą.

Z drugiej strony, prawdopodobnie masz całkowicie uzasadnioną potrzebę, aby Twój widok zachowywał się inaczej podczas debugowania wewnątrz Visual Studio, i możesz to zrobić. Wystarczy przenieść instrukcję "if" poza widok i do czegoś, co jest skompilowane przez Visual Studio, zamiast ASP.NET. Robimy to za pomocą pomocnika HTML. Na przykład:

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

Obejmuje to debugowanie plików JS podczas uruchamiania w konfiguracji debugowania w programie Visual Studio, ale w przeciwnym razie zminimalizowane JS.

+1

Przełączanie między minified a pełny javascript/css był dokładnie powodem, dla którego używałem tego IF DEBUG. Dziękuję za Twoją odpowiedź. –

+0

Jest to mylące, ponieważ studio graficzne wyłapuje niewłaściwy blok tekstu. – ajbeaven

+1

+1 bardzo dobre wyjaśnienie na temat dwóch kompilatorów. Ma to sens teraz. – ashes999

0

Sprawdź ustawienia projektu, aby upewnić się, że DEBUG nie jest zdefiniowany.

3

Ustaw <compilation debug="false"> w pliku web.config.

+0

to nie działa? to działa dla mnie: http://stackoverflow.com/questions/2951128/c-and-asp-net-mvc-using-if-directive-in-a-view/4509854#4509854 – russau

Powiązane problemy