Debug.WriteLine在发行版本中

有没有一种方法可以在发布版本中使用Debug.WriteLine ,而无需定义DEBUG

不,但是您可以通过定义TRACE和使用Trace.WriteLine.来使用Trace中的Trace Trace.WriteLine. 看看这里:

http://support.microsoft.com/kb/815788

否。如果您没有定义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