Как я могу легко исключить определенные строки кода из компиляции?

Рассеянный в течение проекта программного обеспечения я продолжаю работать, много строк кода, которые были записаны для отладки и служебных целей. Прежде чем я скомпилирую свой код, я хочу способ выбрать, должны ли эти блоки кода быть включены в мою компиляцию (что-то, что не потребует навигации по комментирующему коду). Как я могу сделать это?

Я программирую в c# и использую Microsoft Visual Studio 2010.

6
задан Amichai 2 July 2010 в 16:55
поделиться

7 ответов

Добавьте атрибут [Conditional ("DEBUG")] в методы, которые вы хотите выполнять только в отладочной сборке. См. здесь для получения более подробной информации.

13
ответ дан 8 December 2019 в 02:45
поделиться

Я бы посоветовал заключить ваши блоки в #ifdef SOMETHING и #endif , а затем указать SOMETHING в настройках вашего проекта когда вы хотите включить этот блок в свою компиляцию.

7
ответ дан 8 December 2019 в 02:45
поделиться

Вам нужны директивы препроцессора или операторы условной компиляции. Вы можете прочитать о них здесь .

Пример из этой ссылки:

#define TEST
using System;
public class MyClass 
{ 
    public static void Main() 
    {
        #if (TEST)
            Console.WriteLine("TEST is defined"); 
        #else
            Console.WriteLine("TEST is not defined");
        #endif
    }
}

Код компилируется, только если ТЕСТ определен в верхней части кода. Многие разработчики используют #define DEBUG, чтобы включить отладку кода и снова удалить его, просто изменив эту строку вверху.

7
ответ дан 8 December 2019 в 02:45
поделиться

Рассмотрите возможность использования класса Debug для условного протоколирования, утверждения и т. Д. Это дает много преимуществ. Вы можете выбрать регистрацию (или нет) во время выполнения. Они ограничивают вас (в основном) действиями, не влияющими на поведение, решая некоторые (действительные) проблемы @ STW. Они позволяют использовать сторонние инструменты ведения журнала.

3
ответ дан 8 December 2019 в 02:45
поделиться

Если они предназначены для отладки, то единственное приемлемое решение - заключить такой код в:

#ifdef DEBUG

#endif

Это гарантирует, что код будет включен при компиляции в режиме отладки, но исключен в режиме выпуска.

1
ответ дан 8 December 2019 в 02:45
поделиться

Возможно, вы захотите полностью переместить эти отладочные функции из классов - если ваши классы «меняют форму» между режимами отладки и выпуска, это может стать настоящей головной болью и может быть трудным для диагностики проблем. .

Вы можете подумать о создании отдельной сборки «Отладка», которая содержит все ваши помощники по отладке - затем просто убедитесь, что вы можете исключить ее из решения и успешно построить без нее.

1
ответ дан 8 December 2019 в 02:45
поделиться

Вы можете использовать директивы препроцессора w / #if

1
ответ дан 8 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: