Короткий ответ
Похоже, что это Trace
сообщения , а не Debug
сообщения , поэтому они появляются даже в сборках выпуска.
Длинный ответ
Давайте посмотрим, что происходит, исследуя различные контекстуальные значения термина «Отладка» здесь.
Конфигурация сборки «Отладка»
Во-первых, естьконтекст раскрывающегося списка с параметрами «Отладка» и «Выпуск» в Visual Studio.Эти параметры конфигурации сборки .Чтобы понять значение этого параметра, дважды щелкните узел «Свойства» для своего проекта и перейдите на страницу «Сборка».
Thisстраница (и некоторые другие) могут иметь параметры, специфичные для определенной конфигурации сборки.Вы можете увидеть настройки для каждой конфигурации в раскрывающемся меню на странице (по умолчанию используется та конфигурация, которую вы используете в данный момент).
В именах «Отладка» и «Выпуск» нет ничего особенного.это просто конфигурации по умолчанию, с настройками по умолчанию для этих сценариев.Вы можете изменить настройки для конфигурации.Вы также можете определить свои собственные конфигурации сборки, но это выходит за рамки этого ответа.Наконец, эти параметры также параметризуются аналогичной целевой платформой (например, «AnyCPU», «x86» и т. Д.), Но для этого ответа я предполагаю, что все сборки используют одинаковые настройки платформы.
Символ условной компиляции «DEBUG»
C # имеет условную компиляцию - возможность компилировать различные фрагменты кода в зависимости от символов, которые либо определены, либо не определены во время компиляции.Например, эта константа имеет значение «A», если определено MY_SYMBOL_NAME
, или «B» в противном случае.
public const string MyConst =
#if MY_SYMBOL_NAME
"A";
#else
"B";
#endif
Три верхних параметра на странице «Build» проекта управляют этими символами.В частности, это «Определить константу DEBUG» и «Определить константу TRACE», которые действительно относятся к символам компиляции.При их проверке выбранный параметр сборки компилируется с определенными символами DEBUG
и TRACE
соответственно.
По умолчанию конфигурации «Debug» и «Release» определяют TRACE
, но только подходящим образом »«Отладка» определяет DEBUG
.
Условная компиляция Debug
Class
распространяется исключительно на члены классов System.Diagnostics.Debug
и System.Diagnostics.Trace
: вызовы методов этих классов будуткомпилируется только тогда, когда соответствующий символ определен.Так вот:
Debug.WriteLine("!");
трактуется так:
#if DEBUG
Debug.WriteLine("!");
#endif
Эти методы пишут так называемым «слушателям трассировки», которые можно настроить либо в коде, либо вфайлы конфигурации приложения .
Так что если текст, который вы видите, написан с помощью вызовов Trace
, то вы все равно увидите его, даже в конфигурации Release.Конечно, это означает, что это ведение журнала будет сохраняться в поставляемых версиях, если вы явно не отключите параметр «Определить константу TRACE».
Начать отладку и запустить без отладки
Так почему Visual Studio показываетэто все равно?Потому что есть одно больше значения «Отладка»: запускаете ли вы приложение с подключенным отладчиком Visual Studio или нет.Оба варианта запуска перечислены в строке меню отладки VS: «Начать отладку» и «Начать без отладки».Это ортогонально используемой конфигурации сборки: вы можете запустить сборку Debug без подключенного отладчика, и вы можете запустить сборку Release с подключенным отладчиком (хотя это может быть не так полезно, потому что в некоторых точках останова могут не быть достигнутыслучаи).
При использовании отладчика в окне «Вывод» отображаются сообщения, записанные в прослушиватель трассировки по умолчанию.Это помечено как «Отладка», но оно включает в себя все, что там написано, включая вызовы Trace
, которые включены (по умолчанию) в сборки Release.