在一个项目单步跟踪这么一段程序
System.Diagnostics.Trace.Listeners.Clear();
System.Diagnostics.Trace.AutoFlush = true;
System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener("app.log"));
System.Diagnostics.Trace.WriteLine(System.DateTime.Now.ToString());
总是把最后一句System.Diagnostics.Trace.WriteLine给跳过了没执行。
新建一个项目后,把这段语句复制到里面,单步跟踪System.Diagnostics.Trace.WriteLine正常执行了。
比较两个项目“属性”、“生成”中,配置为“release”时一个选项“定义Trace常量”,新项目勾选了此项,而不执行的那个项目没有选此项。
勾选上,则单步跟踪System.Diagnostics.Trace.WriteLine正常执行了。
Trace类是根据这个编译常量“Trace”来决定是否编译到最终代码的,新建的项目Release时,默认时勾选此项的。
同样的Debug时,默认是选了“定义Debug常量”和“定义Trace常量”,这时,代码中的Debug类也会被编译到最终代码。
Trace常量是编译环境自定义的编译常量,我们也可以自定义编译常量,用于决定代码的片段是否被编译到程序集。与代码中if else的区别就在于条件编译是在编译是决定,而if else是在运行时决定。
相关知识可参考此处