ASP.NET: как мне скомпилировать в режиме отладки? - PullRequest
0 голосов
/ 02 января 2011

AFAIK, обычный веб-сайт / веб-приложение ASP.NET включается в режим отладки, когда для параметра веб-конфигурации / приложения-конфигурации "compilation" установлено значение debug = "false".

Но я не совсем понимаю, как это работает. Давайте рассмотрим пример:

У меня есть <compilation debug="true" />. Я добавил следующую строку в метод Page_Load:

 System.Diagnostics.Debug.WriteLine("Page_Load");

Когда я запустил сайт в режиме «отладки» (с помощью кнопки F5), он поместил меня «Page_Load» в окно вывода. Пока все в порядке.

Когда я изменяю режим компиляции приложения на неотладочный:

Будет ли все перекомпилировано для режима «без отладки»? Этого достаточно, чтобы перейти в «производственную» среду только с этим изменением?

Полагаю, этого должно быть достаточно для сайта, который не использует другой проект. В противном случае, я бы лучше переключил всю конфигурацию в режим «Release». В этом случае КАЖДЫЙ проект будет перекомпилирован в режиме «Release».

Я прав? Не могли бы вы указать мне, если здесь что-то не так?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 02 января 2011

Суть вашего вопроса заключается в разнице между компиляцией в режимах отладки / выпуска Visual Studio и флагом отладки Web.config.

Я постараюсь объяснить вам обоим.

СначалаВ общем, вы должны узнать , как компилируется приложение ASP.NET, иначе вы не поймете разницу между двумя компиляциями.

Приложение ASP.NET созданоразметка (т. е. страницы ASPX, элементы управления .ascx, файлы маркеров .ashx .asmx) и code-behind .Кодовым компонентом, с точки зрения вашей IDE (независимо от Visual Studio, MonoDevelop и т. Д.), Является .NET Class Library , т.е.набор классов, которые ничего не делают в одиночку.Они могут быть скомпилированы в режим отладки или выпуска безразлично путем настройки IDE.Если вы скомпилируете в режиме Release, то вызовы класса Debug будут игнорироваться.

А как насчет разметки?Когда вы запускаете веб-приложение, файлы разметки компилируются сервером приложений для получения окончательных сборок.Например, страница Default.aspx с файлом с выделенным кодом компилируется в конечный класс, который наследует класс с выделенным кодом и записывает в HTTP-вывод все его статические части, а также все элементы управления, созданные вбазовый класс в позициях, которые были выбраны во время проектирования.Встроенный код (т. Е. <script runat=server> теги) тоже компилируется.Чтобы выбрать режим компиляции, используется флаг отладки в Web.config, потому что вы не можете точно определить, была ли сборка скомпилирована в режиме отладки или выпуска, просто размышляя об этом (хотя могут быть некоторые эмпирические критерии).

В двух словах

  1. Когда вы вызываете класс Debug из кода, убедитесь, что ваша IDE компилирует сайт в режиме отладки
  2. Когда вы вызываете класс Debug из встроенного кода в разметке, убедитесь, что у вас установлен флаг отладки Web.config
  3. Если вы развертываете свое приложение как исходный код (это не работает для меня в Mono, я долженfirst xbuild it), я не уверен, но я верю, что флаг отладки будет использоваться и для первого этапа компиляции

Надеюсь, я вам помог!

0 голосов
/ 02 января 2011

Насколько я понимаю, когда вы изменяете web.config для веб-сайта , чтобы отключить отладку, JIT запускается с нуля - поскольку все методы в пространстве имен System.Diagnostics.Debug помечены как включенные только в режиме отладки ([Conditional("DEBUG")]), вызовы вообще не будут выполняться в сборке релиза.

Для предварительно скомпилированного веб-приложения в режиме отладки эти вызовы будут выполняться в создаваемых DLL-библиотеках. Отключение отладки в этот момент не поможет вам - вам необходимо перекомпилировать / предварительно скомпилировать веб-приложение в режиме выпуска перед выпуском это.

...