预定义指令之debug

 

1)根据你必须知道的.NET一书,

 

#define DEBUG  

 class Program
    {
        static void Main(string[] args)
        {
#if DEBUG 
         Console.WriteLine("debug mode");
#else
            Console.WriteLine("release mode");
#endif
        }

    }

代码很简单,但其实这段代码是有问题的。

原因出在,其实vs中内置了DEBUG,所以无需在开头再定义DEBUG。还是stackoverflow这里讲得比较正确。

把第一行去掉后,编译选项选择debug/release的切换,就能切换编译的结果了。

 

 2)关于ConditionAttribute

        class Test
        {
            static void Main()
            {
                Foo();
                Console.Read();
            }
            [Conditional("DEBUG")]
            static void Foo()
            {
                Console.WriteLine("debug mode");
            }

        }

在DEBUG模式下,Foo能运行,否则编译时就会被跳过。

 

对上面的一点扩展:

#define mydefineSymbol
using System;
using ...
class Test
        {
            static void Main()
            {
                Foo();
            
                Console.Read();
            }
            [Conditional("mydefineSymbol")]
            static void Foo()
            {
                Console.WriteLine("debug mode");
            }

        }

在第一行定义了mydefineSymbol之后,这样,Foo就会被编译器包括进来;否则则不被编译。

 

3)很多时候,我们需要在测试环境下一套逻辑,生产环境中用另一套,那么可以使用在项目属性对话框中,自定义条件编译符号,这样,不用在每个文件最上手动添加一个#define。

 

 

代码是:

 

            static void Main()
            {
#if !Produce

                Console.WriteLine("Produce");
#endif 
                Console.Read();
            }

如果是Debug模式,则会编译该条件;如果是Release则会忽略。

 

注意:

1)DEBUG是大小写敏感的,写成Debug或debug是无用的。

 2)写Release是没有用的。原因是只有DEBUG这个词在VS中被预定义了。

posted @ 2013-09-11 11:45  瓜王  阅读(623)  评论(0编辑  收藏  举报