Удаление кода из версии 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
Посмотрите