Я читаю Руководство по разработке .NET Framework - Как to: Используйте TraceSource и фильтры с прослушивателями трассировки и в самом начале есть следующая рекомендация:
Основное отличие версии 2.0 заключается в том, что трассировку можно инициировать через экземпляры TraceSource. TraceSource предназначен работать как расширенная система трассировки и может использоваться вместо статических методов более старых Trace и Отладка классов трассировки. Знакомое Трассировка и Классы отладки все еще существуют, но рекомендуется использовать TraceSource для трассировки.
Я понимаю, как TraceSource используется вместо Trace, но я еще не понял, как он используется для замены Отладка.
Вот цитата из книги C# 5.0 в двух словах: Полная ссылка:
Debug и Trace – это статические классы, предоставляющие базовые возможности ведения журналов и утверждений.
Эти два класса очень аналогичный; главным отличием является их предполагаемое использование.
А теперь более подробное описание разницы:
Все методы класса Debug определяются с помощью [Conditional("DEBUG")].
Все методы класса Trace определяются с помощью [Conditional("TRACE")] сильный>.
Таким образом, это приводит к устранению Вызовы Debug в сборке Realease:
Это означает, что все обращения к Отладка или Trace удаляются компилятором, если вы не определите символы DEBUG или TRACE.
Как работает TraceSource объяснить эту разницу?
TraceSource
не записывает звонкиTrace.XXX
иDebug.XXX
, только звонкиTraceSource.XXXX
. Ему не нужно учитывать эту разницу, поскольку он все равно не прослушивает эти вызовы... Вы можете посмотреть кодTraceSource
: referencesource.microsoft.com/#System/compmod/system/, но для записи вызовов все еще необходимо определитьTRACE
. - person Ron Beyer   schedule 10.08.2015Debug.WriteLine()
вызовамиTraceSource traceSource;
, чтобы они также были удалены из сборки DEBUG? - person Egor Okhterov   schedule 10.08.2015TraceSource.cs
и не нашел ни одного метода с пометкой [Conditional(DEBUG)]. Вполне возможно, что я что-то упускаю, не могли бы вы указать мне на этот метод? - person Egor Okhterov   schedule 10.08.2015[Conditional("TRACE")]
, поэтому трассировка будет работать в выпуске, пока определен символTRACE
. Если вы хотите, чтобы они были удалены из отладочной сборки, перейдите в свойства сборки и снимите флажок «Определить константу TRACE» для параметров отладочной сборки. DEBUG не подразумевает TRACE. - person Ron Beyer   schedule 10.08.2015TRACE
также по умолчанию определено для релизных сборок, и вы меняете его таким же образом. Вы также можете отменить его определение для одного файла кода, включив#undef TRACE
в начало файла. - person Ron Beyer   schedule 10.08.2015[Conditional("TRACE")]
, я хочу, чтобы старые операторыDebug.WriteLine()
преобразовывались вtraceSource.WriteDebug()
, и я хочу, чтобы эти вызовыTraceSource
были удалены из сборки DEBUG. - person Egor Okhterov   schedule 10.08.2015Debug.WriteLine
перенаправляются на источник трассировки? Последняя часть проста, просто снимите отметку с определения трассировки в сборке отладки. Но как вы хотите преобразовать старые утверждения? Я могу привести пример того, как это сделать автоматически, если это необходимо... - person Ron Beyer   schedule 10.08.2015