У меня есть код для доступа к API в сети. Один из параметров API позволяет мне сообщить им, что я тестирую.
Я хотел бы установить этот параметр в своем коде только во время тестирования. В настоящее время я просто комментирую код, когда делаю сборку релиза.
Существует ли автоматический способ сделать это на основе конфигурации сборки?
Вы можете использовать одно из следующих:
Условный
атрибут Атрибут Условный
указывает компиляторам, что вызов метода или атрибут следует игнорировать, если не определен указанный символ условной компиляции.
Пример кода:
[Conditional("DEBUG")]
static void Method() { }
#if
директива препроцессора Когда компилятор C # встречает директиву препроцессора #if
, за которой в конечном итоге следует #endif директива, она компилирует код между директивами, только если заданный символ определен. В отличие от C и C ++, вы не можете присвоить символу числовое значение. Оператор #if в C # является логическим и только проверяет, определен ли символ или нет.
Пример кода:
#if DEBUG
static int testCounter = 0;
#endif
Методы Debug.Write
Debug.Write
(и Debug.WriteLine
) записывают информацию об отладке в трассировку. слушателей в коллекции Listeners .
См. Также Debug.WriteIf
и Debug.WriteLineIf
.
Пример кода:
Debug.Write("Something to write in Output window.");
Остерегайтесь использования директивы #if
, поскольку она может привести к непредвиденным ситуациям в сборке Release. Например, см .:
string sth = null;
#if DEBUG
sth = "oh, hi!";
#endif
Console.WriteLine(sth);
В этом случае сборка без отладки выведет пустое сообщение. Но это потенциально может вызвать NullReferenceException
в другом случае.
Также имеется инструмент DebugView , который позволяет захватывать отладочную информацию из внешних приложений.
да, заключите код в
#if DEBUG
// do debug only stuff
#else
// do non DEBUG stuff
#endif
Google для «символы компиляции C #»
Visual Studio автоматически определяет DEBUG
, когда вы находитесь в конфигурации отладки. Вы можете определить любые символы, которые хотите (посмотрите свойства вашего проекта, вкладку сборки). Помните, что злоупотребление директивами препроцессора - плохая идея, это может привести к коду, который очень трудно читать / поддерживать.
У меня было такое же Проблема и решение, которое я выбрал, заключается в использовании:
if (System.Diagnostics.Debugger.IsAttached)
{
// Code here
}
Это означает, что технически в производстве вы можете подключить отладчик и запустить этот фрагмент кода.
В дополнение к директивам #if #endif вы также можете использовать условные атрибуты. Если вы пометите метод атрибутом
[Conditional("Debug")]
Он будет скомпилирован и запущен только тогда, когда ваше приложение собрано в режиме отладки. Как было отмечено в комментарии ниже, они работают только в том случае, если метод имеет тип возврата void.
Вот другой пост с похожим результатом : http://www.bigresource.com/Tracker/Track-vb-lwDKSoETwZ/
Лучшее объяснение можно увидеть на сайте : http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx
// preprocessor_if.cs
#define DEBUG
#define MYTEST
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !MYTEST)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
Console.WriteLine("DEBUG and MYTEST are defined");
#else
Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
}
}
public int Method ()
{
#if DEBUG
// do something
#endif
}