多年来,我一直在VB.NET中使用DEBUG编译器常量来将消息写入控制台.我也一直在以类似的方式使用System.Diagnostics.Debug.Write.我总是理解当使用RELEASE作为构建选项时,编译器会遗漏所有这些语句,从而释放生产代码中的调试语句开销.最近在使用Silverlight 2 Beta 2时,我注意到Visual Studio实际上附加了一个RELEASE构建,我正在运行一个公共网站并显示DEBUG语句,我认为这些语句甚至没有编译!现在,我的第一个倾向是假设我的环境有问题,但我也想问任何对System.Diagnostics有深入了解的人.
首选方法是实际使用条件属性来包装调试调用,而不是使用编译器指令.#ifs可能会变得棘手并且可能导致奇怪的构建问题.
使用条件属性的示例如下(在C#中,但也在VB.NET中工作):
[ Conditional("Debug") ] private void WriteDebug(string debugString) { // do stuff }
在没有设置DEBUG标志的情况下进行编译时,对DebugDewug的任何调用都将被删除,就像调用Debug.Write()一样.
检查Debug.Write方法.它标有
[Conditional("DEBUG")]
属性.
ConditionalAttribute的MSDN帮助说明:
向编译器指示应忽略方法调用或属性,除非定义了指定的条件编译符号.
构建配置是否具有发布或调试标签无关紧要,重要的是是否在其中定义了DEBUG符号.