Каково использование директивы pre-processor #if DEBUG
в С#? Когда мы должны использовать это?
Каково использование директивы pre-processor #if DEBUG в С#? Когда мы должны это использовать?
Ответ 1
В режиме отладки:
#if DEBUG
System.Console.WriteLine("Debug version");
#endif
System.Console.WriteLine("Output");
Вывод как
Debug version
Output
В режиме деблокирования:
#if DEBUG
System.Console.WriteLine("Debug version");
#endif
System.Console.WriteLine("Output");
Вывод как
Output
читайте это: # if (ссылка С#)
Использование: Если у вас есть набор значений для тестирования в режиме отладки, а не в режиме выпуска, вы можете использовать #if DEBUG
Ответ 2
Вы можете чувствовать себя более комфортно с атрибутом Conditional
, который можно использовать для исключения целых методов без необходимости усложнять исходный код с помощью условных выражений на стороне вызова:
[Conditional("DEBUG")]
void Foo()
{
}
Foo()
можно безопасно вызывать как в отладке, так и в выпуске - однако в режиме выпуска он будет нерабочим.
Ответ 3
Вам не нужно использовать его вообще. Цель этого - иметь разделы кода, которые только компилируются в режиме отладки. например у вас может быть некоторый код, который включал бы главного пользователя, который мог бы претендовать на то, чтобы быть другим пользователем в системе для тестирования и отладки pruposes. Вы не хотели бы, чтобы этот пользователь был включен в код выпуска по соображениям безопасности, поэтому вы должны обернуть релевантные разделы кода в #if DEBUG, и они будут исключены из кода выпуска.
Ответ 4
При компиляции вы можете установить флаги компилятора, которые вы можете использовать для ввода кода в эти директивы. Этот код не будет компилироваться и никогда не будет завершен в окончательном выпуске сборки. DEBUG является одним из предопределенных, но вы можете использовать свои собственные.
В качестве примера использования: В одном из текущих событий мы используем флаг компилятора, чтобы указать, следует ли использовать маска входа для входа в систему пользователя или автоматический вход в систему с текущим директором. Второй режим предназначен только для разработчиков, например. отлаживать быстрее без необходимости входа в систему.
Другой пример: в каком-то моно кодеке вы увидите флаги. В этом случае код может быть скомпилирован по-разному, когда, например, нацеливая другую структуру, поскольку она использует классы, которые могут не существовать в более ранних версиях.
Относительно этого является условный -Атрибут, с помощью которого вы можете пометить метод. Если указанный флаг не установлен, вызовы метода не будут выполняться. Метод все еще заканчивается в IL, но вызовы будут удалены.
Проверьте, например, следующий код:
var mthods = typeof (Debug).GetMethods().Where(mi => mi.Name.Equals("WriteLine")).ToList();
var attribs = mthods[0].GetCustomAttributes(true);
Вы заметите, что метод Debug.WriteLine имеет применимый к нему атрибут Conditional: вызовы к нему будут удалены при компиляции без флага компилятора DEBUG.
Ответ 5
он также пригодится при тестировании служб Windows. Вы можете ввести #if DEBUG, чтобы начать свой процесс вручную, поэтому вам не нужно устанавливать службу и прикладывать ее к отладке.