class Program
    {
        static void Main(string[] args)
        {
            Test();
        }        [] //此处需要添加一个属性标签,控制当Debug模式时该函数有效,Release模式时无效。
        public static void Test()
        {
            Console.WriteLine("aa");
        }
    }
我的问题是,在声明Test()静态函数的上一行添加一个属性标签。运行结果如下:
1)  在Debug模式下编译,就会输出aa 这个字符串。
2)  在Release模式下编译,没有任何输出,就像是该Test()不存在一般。2年前用过,现在死活是想不起来了。希望大伙帮帮忙, 先谢谢啦~  :)我知道类似的功能可以通过#if... #else 这样的宏定义来实现,不过相比较通过属性标签要麻烦很多,特别是这种函数被多处调用的时候,要搞乱代码。

解决方案 »

  1.   

    一点回应都没有,太离谱了吧。我觉得这方面的信息应该很有用啊,特别是对那些做SDK的,尤其是写单元测试之类的时候。
      

  2.   

    zhchfsky,需要在声明Test()函数的上一行,添加一个属性标签, 才能够编译过。大概是没仔细看吧, 呵呵。 :)
      

  3.   

    #if DEBUG
        Console.WriteLine("a");
    #endif
      

  4.   

    wuyq11,谢谢,我已经知道用条件宏可以实现了,在首发贴里说明了的。其实这种条件宏的方式有一个缺点,就是当用Release模式编译的时候,该函数是依然存在的,或者说当通过按F5单步运行的时候,用F11依然能够进入那个Test()函数,白白浪费了一些资源,因为函数参数的压栈和出栈等等,当Test函数有参数时。由于这类函数会被我调用上百万次都很常见,所以还是属性标签的方式要好些。而如果是用属性标签的方式,当为Release模式的时候,在VS里看代码的话,无论是Test()函数的声明、实现以及被调用的代码都会变成灰色,相当于对编译器来说不存在这么个Test()。而且对于C#代码风格来说,出现#if...#endif这样的破化了代码步进,看上去怪怪的,有种C++的感觉,在C#代码里显得不伦不类的。(这个只是个人观点。)随便提一下我们用于生成调试用的DLL和生成用来发布的DLL的代码文件是共用的。 此类调试函数会有很多,而且被调用的次数就跟多了。
      

  5.   

    [Condition("DEBUG")]
    大概是这么个名字。
      

  6.   

    每次我都是去Reflector一下Debug类下面的方法, 
    然后复制过来。
      

  7.   

            [System.Diagnostics.Conditional("DEBUG")] //此处需要添加一个属性标签,控制当Debug模式时该函数有效,Release模式时无效。
            public static void Test()
            {
                Console.WriteLine("aa");
                MessageBox.Show("aa");
            }
      

  8.   

    cjcgy & xingyuebuyu,嗯,就是Conditional("DEBUG")了,这个就是我想要的。
    用.Net Reflector 反编译Debug类去找,这个想法不错,呵呵。 :D可以结贴了。 :)