Режим выпуска vs Debug = "false" - PullRequest
11 голосов
/ 21 июля 2010

Я пытаюсь найти определенное объяснение того, как компиляция в режиме выпуска влияет на веб-приложение .Net 3.5 по сравнению с debug = "false".До сих пор похоже, что установка debug = "false" имеет тот же эффект, а компиляция в режиме выпуска устарела, но я не могу найти какого-либо твердого доказательства того, что это так.

Этот вопрос выглядел многообещающим, но, похоже,ответьте на вопрос, в чем разница между сборками отладки и выпуска, а не режимом выпуска и debug = "true": В чем разница между отладкой компиляции = "false" и режимом выпуска?

Однако это такссылка на эту статью: http://odetocode.com/blogs/scott/archive/2005/11/15/debug-and-release-builds-in-asp-net-2-0.aspx

"Эта новая модель компиляции делает Configuration Manager для веб-сайта устаревшим. Единственный параметр, отображаемый в« проекте »веб-сайта Visual Studio 2005, - это отладочная конфигурация.t fret - это ничего не значит. Файл web.config теперь управляет школой. "

Теперь это самый близкий мне ответ, и, похоже, это подразумевает, что режим релиза обесценился в пользуof debug = "false", но я не могу найти никакого подтверждения этого на MSDN или любом другом источнике.

Любая помощь будет оказанагорячо приветствуется.

Обновление

Извините;чтобы уточнить, это «Проект веб-приложения», о котором я говорю.

Чтобы немного перефразировать мой вопрос, если у меня есть следующий параметр в web.config:

<compilation defaultLanguage="c#" debug="false">

Какой эффект (если есть) компилирует режим выпуска и отладкиесть

Ответы [ 4 ]

6 голосов
/ 22 июня 2012

TL; DR = Более важная вещь - отладка компиляции = "true | false". Однако компиляция в Debug также незначительно влияет на производительность.

Разница между Debug и Release (помимо определения константы DEBUG или нет) заключается в флаге «Оптимизировать код», который отключен в Debug и включен в Release. (Если вы посмотрите на настройки проекта, вкладка Build.)

Флаг «Оптимизировать код» указывает компилятору языка выполнить некоторые оптимизации (например, удалить неиспользуемые переменные и пропустить некоторые символы отладки) при создании DLL. Это относительно небольшое улучшение производительности (возможно, большее влияние в C ++ по сравнению с C # / VB) и небольшое сокращение использования памяти DLL по сравнению с тем, когда флаг не установлен.

Флаг компиляции debug = "true" сообщает JIT-компилятору , что этот код должен быть подключен для отладки. Это снижает производительность в нескольких измерениях (время загрузки, время выполнения, загрузка памяти и ресурсов), но позволяет отлаживать исполняемый код.

Если вам нужны более подробные трассировки стека в производственной среде, вы, вероятно, можете запустить сборку Debug с компиляцией debug = "false" с небольшой разницей в производительности. Но я бы проверил производительность обоих, чтобы убедиться, что вы не слишком много теряете.

Кредит принадлежит этому ответу , который ссылается на эту запись в блоге , и позже я нашел эту , которая содержит всю эту информацию.

5 голосов
/ 21 июля 2010

Вы должны быть осторожны в выборе слов. Существуют проекты «Веб-приложение» и «Веб-сайт».

Конфигурация «Релиз» для проектов «Веб-сайт» отсутствует. Веб-сайты используют только параметр отладки в разделе компиляции web.config. Если вы откроете «Веб-сайт», обратите внимание, что единственной конфигурацией, указанной в «Диспетчере конфигурации», является «Отладка». Управлять компиляцией можно на странице свойств проекта «Параметры MSBuild» или в диалоговом окне «Опубликовать веб-сайт».

Конфигурации «Выпуск» и «Отладка» работают должным образом для проектов «Веб-приложение».

1 голос
/ 21 июля 2010

Идея, лежащая в основе режима Release и режима Debug, заключается в том, что в режиме отладки компиляция содержит символы отладки, которые полезны для отладки, но не для производства, поскольку замедляют процесс.

Однако в режиме «Release» эти символы отладки удаляются, поэтому процесс работает без проблем.

Теперь Microsoft реализовала вышеуказанную модель в проектах веб-приложений, в то время как проект веб-сайта немного отличается. Надеюсь, это поможет.

0 голосов
/ 03 февраля 2018

Вот разница. Если у вас есть это в вашем файле web.config:

<system.web>
    <compilation debug="true" .../>

И вы выбираете Release из выпадающего меню в Visual Studio (обратите внимание, что они конфликтуют), все ли будет скомпилировано в режиме отладки или в режиме выпуска?

Visual Studio ничего не знает о компиляции веб-приложения. Создайте веб-приложение и проверьте папку bin, и вы заметите, что она пуста. Это потому, что ASP.NET компилирует его. ASP.NET будет использовать флаг compilation debug из файла конфигурации, чтобы выяснить, как скомпилировать файлы .cs, собрать формы, пользовательские элементы управления и т. Д. Он также будет использовать этот флаг, чтобы решить, следует ли выполнять связывание и минимизацию.

Эта статья довольно красиво подводит итог:

В заключение вы управляете сборками отладки и выпуска с использованием атрибута debug раздела компиляции в web.config - если только вы предварительно не компилируете веб-сайт с помощью команды «Опубликовать» или инструмента развертывания веб-сайта. WSD позволит вам выбрать сборки Debug или Release, предварительно скомпилировать сайт и соответствующим образом изменить файл web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...