Debug.WriteLine在发行版本中
有没有一种方法可以在发布版本中使用Debug.WriteLine
,而无需定义DEBUG
?
不,但是您可以通过定义TRACE
和使用Trace.WriteLine.
来使用Trace
中的Trace
Trace.WriteLine.
看看这里:
否。如果您没有定义DEBUG
预处理器符号,由于应用了[Conditional("DEBUG")]
属性,编译器将删除对Debug.*
任何调用。
尽pipe如此,您可能需要考虑Trace.WriteLine
或其他日志logging技术。
虽然您仍然需要定义debugging – 您不必在组装范围内进行。 你只能在你想要的源文件中定义它。 所以,如果你想从特定的类进行debugging日志logging,你可以为该源文件定义DEBUG。
#define DEBUG using System.Diagnostics; ... class Logger { void Log( string msg ){ Debug.WriteLine( msg ); } }
是。 您可以像上面的注释中提到的那样使用TRACE,或者不使用定义树来定义任何编译时间常量。
var p = Expression.Parameter(typeof(string), "text"); var callExp = Expression.Call( typeof(System.Diagnostics.Debug).GetRuntimeMethod( "WriteLine", new [] { typeof(string) }), p); Action<string> compiledAction = Expression.Lambda<Action<string>>( callExp, p) .Compile();
在此之后,您可以通过调用随时调用Debug.WriteLine
compiledAction("Debug text");
你本质上是通过没有静态方法调用来欺骗编译器,而是在运行时dynamic构造它。
此后没有性能问题,编译和重新使用该操作。
这就是我在SharpLog中编写DebugLogger的方法。
你可以看看这里的源代码,如果你感兴趣的话: https : //github.com/prasannavl/SharpLog/blob/master/SharpLog/DebugLogger.cs