似乎没有涵盖的简单问题:如果我在代码中使用了很多Debug.WriteLine
语句,我的生产版本中是否会完全没有这些语句?
我的意思是:编译器是否足够智能,不会为这些调用发出任何代码?或者,如果有指令,我是否必须通过#if DEBUG..#end
包围它们?
答案 0 :(得分:2)
调试类成员用ConditionalAttribute标记,因此如果在发布模式下完成构建,则不会编译调用站点
请参阅本页顶部 http://msdn.microsoft.com/en-us/library/9z9k5ydz.aspx
答案 1 :(得分:1)
如果在RELEASE模式下构建项目,则省略所有Debug.WriteLine语句,因为它们是以ConditionalAttribute设置为DEBUG进行修饰的。
这是在编译时完成的。使用反编译器(例如.NET Reflector,dotNetPeek)分析程序集时,可以检查此项。如果您在DEBUG模式下构建,则会调用Debug.WriteLine。如果在RELEASE模式下构建它,则不存在调用。
答案 2 :(得分:1)
Debug类输出仅在Debug配置中有效。 Trace类在Debug和Release中都有效。因此,您不需要使用#if DEBUG。