Удаление кода из версии Release в .NET.

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

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

Ответ 1

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

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

Ответ 2

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

#ifdef DEBUG
  // Your code
#endif

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

[Conditional("DEBUG")]
private void MyDebugMethod()
{
  // Your code
}

Ответ 3

Посмотрите