Подтвердить что ты не робот

Каково использование директивы pre-processor #if DEBUG в С#? Когда мы должны это использовать?

Каково использование директивы pre-processor #if DEBUG в С#? Когда мы должны использовать это?

4b9b3361

Ответ 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, чтобы начать свой процесс вручную, поэтому вам не нужно устанавливать службу и прикладывать ее к отладке.