Представление asp.mvc вводит #IF DEBUG в конфигурацию выпуска

У меня есть вид ASP MVC, где есть следующее заявление

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

Когда в Visual Studio я выбираю конфигурацию выпуска из выпадающего списка, чтобы выполнить сборку, код все еще проходит через раздел 1.

В свойствах конфигурации решения все подпроекты решения устанавливаются в конфигурацию выпуска.

Что я не получаю здесь?

3 ответа

Решение

Важно понимать, что для вашего проекта есть две совершенно отдельные компиляции. Первый - это тот, который вы делаете в Visual Studio. Второе - это то, что ASP.NET делает непосредственно перед обслуживанием страницы. If DEBUG внутри вашего представления делается на втором этапе. Описанная вами сборка релиза - это первый шаг. Поэтому параметр отладки / выпуска вашего проекта не имеет ничего общего с параметром отладки в Web.config/ компиляторе ASP.NET.

Более того, для вашей сборки Visual Studio было бы совершенно неуместным изменять параметр отладки в файле Web.config. Это две отдельные компиляции, и одна не должна влиять на другую.

С другой стороны, у вас, вероятно, есть вполне разумная необходимость в том, чтобы заставить ваше представление вести себя по-другому, когда вы отлаживаете в Visual Studio, и вы можете сделать это. Вам просто нужно переместить оператор "if" за пределы представления и сделать что-то, что компилируется Visual Studio вместо ASP.NET. Мы делаем это с помощью помощника HTML. Например:

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

Это включает отладочные файлы JS при запуске в конфигурации отладки в Visual Studio, но в противном случае сворачивает JS.

Задавать <compilation debug="false"> в вашем web.config файл.

Проверьте настройки вашего проекта, чтобы убедиться, что DEBUG не определен.

Другие вопросы по тегам