Я тоже прочитал статью, и это заставило меня поверить, что когда DEBUG не был определен, то ConditionalAttribute, объявленный в функциях System.Debug, заставил бы компилятор полностью исключить этот код. Я предполагаю, что то же самое относится и к TRACE. То есть функции System.Diagnostics.Debug должны иметь атрибуты ConditionalAttributes для DEBUG и TRACE. Я был неправ в этом предположении. Отдельный класс Trace имеет те же функции, и они определяют ConditionalAttribute в зависимости от константы TRACE.
Из System.Diagnostics.Debug:
_
Общедоступная общая запись (_
сообщение как строка _
)
Из System.Diagnostics.Trace:
_
Общедоступная общая подпрограмма записи (_
сообщение как строка _
)
Тогда кажется, что мое первоначальное предположение было верным, что операторы System.Diagnostics.Debug (или system.Diagnostics.Trace) на самом деле не включены в компиляцию, как если бы они были включены в области #IF DEBUG (или #IF TRACE) ,
Но я также узнал от вас, ребята, и убедился, что сборка RELEASE сама по себе не заботится об этом. По крайней мере, в проектах Silverlight, которые все еще немного нестабильны, вам нужно войти в «Дополнительные параметры компиляции ...» и убедиться, что DEBUG не определен.
Мы перешли с .NET 1.1 / VS2003 на .NET 3.5 / VS2008, поэтому я думаю, что некоторые из них работали по-другому, но, возможно, они изменились в 2.0 / VS2005.