У меня есть приложение, в котором я использовал ключи компилятора для управления включением больших блоков кода или нет. Думайте автомобиль с автоматической коробкой передач или механической коробкой передач. Прекрасно работает в режиме отладки, но в режиме деблокирования похоже, что и автоматическая трансмиссия, и ручная трансляция скомпилированы, поэтому автомобиль не слишком хорошо управляется ...Переключатели компилятора C# в режиме деблокирования
Так я ошибаюсь, пытаясь получить функциональность управления опцией из компиляторы?
Подробнее: Мое понимание переключателей компилятора было ошибочным.
Простой проект в комментариях ниже. (Не слишком хорошо, при езде StackOverflow)
Чтобы продолжить аналогию, проект (Winform) был построен с механической коробкой передач. Он был развернут в режиме отладки с использованием проекта установки. (Ошибка).
Через несколько лет потребовалась автоматическая коробка передач. (Нет общности, чтобы привести к базовому классу). Мысль о том, что в один прекрасный день может потребоваться дополнительная коробка передач вручную)
Казалось, что переключатель компилятора - это хорошая идея решить, какой блок кода использовать. Опять же, версия автоматической передачи была развернута в режиме отладки.
После нескольких лет работы я решил, что его следует отпустить. Именно тогда я заметил проблему.
Простой пример (спасибо) показал мне, что это не оба блока, которые были скомпилированы, а только блок в #else. то есть, релиз сборки рассматривает выключатель как выключенный.
Так что, если я не пропущу что-то, то это само собой разумеется. Не используйте ключи компилятора для вариантов развертывания.
Очень сложно понять, о чем вы говорите, можете ли вы опубликовать несколько коротких примеров кода, иллюстрирующих это? – Oded
Erm, так что вы в основном потеряли трек #ifdefs? Тогда вы используете слишком много. –
Простой пример показывает, что в версии сборки игнорируется компилятор. В моем оригинальном посте я ошибался. поэтому, если я не пойму. не используйте переключатели компилятора для параметров проекта. открытый частичный класс Form1: Форма { public Form1() { InitializeComponent(); Дисплей(); } частная пустота Display() { #if (MySwitch) MessageBox.Показать («MySwitch on»); #else MessageBox.Show («MySwitch off»); #endif } –