Удаление кода из сборки выпуска в .NET - PullRequest
12 голосов
/ 03 декабря 2008

Я проводил некоторое тестирование производительности с использованием System.Diagnostics.Debug, и кажется, что весь код, связанный со статическим классом Debug, полностью удаляется при построении конфигурации Release. Мне было интересно, откуда это знает компилятор. Возможно, есть некоторый класс или атрибут конфигурации, который позволяет точно указать это поведение.

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

Ответы [ 3 ]

19 голосов
/ 03 декабря 2008

Вы можете применить атрибут ConditionalAttribute со строкой "DEBUG" к любому методу, и вызовы этого элемента будут присутствовать только в сборках DEBUG.

Это отличается от использования подхода #ifdef, поскольку позволяет выпускать методы для использования другими людьми в их конфигурациях DEBUG (например, методы класса Debug в .NET Framework).

17 голосов
/ 03 декабря 2008

Visual Studio определяет константу DEBUG для конфигурации Debug, и вы можете использовать ее для переноса кода, который вы не хотите выполнять в вашей сборке выпуска:

#ifdef DEBUG
  // Your code
#endif

Однако вы также можете украсить метод с помощью условного атрибута, что означает, что этот метод никогда не будет вызываться для сборок без отладки (метод и все сайты вызовов будут удалены из сборки):

[Conditional("DEBUG")]
private void MyDebugMethod()
{
  // Your code
}
1 голос
/ 03 декабря 2008

Посмотрите директивы препроцессора ...

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