2017-01-03 5 views
4

Я создаю и распространю сборку для других разработчиков. Я распространяю версию Release моей сборки (а не отладки). В одном из классов моей сборки, у меня есть набор кодов для работы только в режиме отладки с помощьюDEBUG vs RELEASE and distribution Assembly

#if DEBUG 
    Console.WriteLine("Debug"); 
#else 
    Console.WriteLine("Release"); 
#endif 

Если другие разработчики ссылаются моя сборка из своего проекта и запустить свой проект в режиме отладки, будет ли мой отладки только условно бежать или нет?

+3

Если вы распространяете версию своего RELEASE кода, это невозможно, потому что этот код был удален компилятором во время сборки – Steve

+4

. Они являются предкомпилятором. Поэтому они обрабатываются во время компиляции. Таким образом, не-отладочная версия будет удалена из сборки при ее компиляции. – Liam

+0

Это проблема XY. Используйте «Debugger.IsAttached» для выполнения проверки времени выполнения. Немного разные семантики, но, возможно, это то, что вы хотите? Не могу сказать точно, вопрос не указан. –

ответ

10

Если другие разработчики ссылаются на мою сборку из своего проекта и запускают их проект в режиме отладки, будет ли мой отладочный только условный запуск или нет?

Нет, потому что Console.WriteLine() никогда не была составлена ​​в Release режима из-за предварительный процессор ограничений.

MSDN есть больше, чтобы сказать об этом:

Когда C# компилятор встречает #if директиву, а затем в конце концов, с помощью #endif директивы, она будет компилировать код между директивами только если указанный символ определен ... Tell me more...

Кроме того, это не правильно думать о нем, как удаляется из сборки, как это никогда не было присутствует в первую очередь.

+0

Благодарим вас за подробное объяснение. –

+0

@ G-Man Вы вполне приветствуетесь, добрый сэр :) – MickyD