[英]Debug.WriteLine from Logging Assembly in Release Mode not writing to debug output in Visual Studio
我的日志库有一个简单的DebugLogger
,如下所示:
public class DebugLogger : Logger
{
protected override void PerformLogging(string entry)
{
Debug.WriteLine(entry);
}
}
日志库已在RELEASE
模式下构建。
引用日志库的应用程序自然是在DEBUG
模式下开发的。
问题是,当使用日志库的应用程序调用DebugLogger.PerformLogging("some debug message")
时,Visual Studio调试输出中不会显示任何内容。
我已验证在DEBUG
模式下构建日志程序集时,事情按预期工作。
我原以为入口程序集处于DEBUG
模式会优先,但看起来并非如此。
有什么可以做的吗?
备注部分中的http://msdn.microsoft.com/en-us/library/6x31ezs1.aspx讨论了编译器在没有定义DEBUG
情况下忽略调试方法。
虽然你仍然需要定义DEBUG - 你不必在程序集范围内进行。 您只能在所需的源文件中定义它。 因此,如果您希望从特定类进行调试日志记录,则可以仅为该源文件定义DEBUG。
#define DEBUG
using System.Diagnostics;
...
class Logger
{
void Log( string msg ){ Debug.WriteLine( msg ); }
}
在编译包含调用的项目时,确定如何处理Debug.WriteLine
调用。 在这种情况下,C#编译器在Release项目(未定义DEBUG
)中看到对Debug.WriteLine
的调用,因此不会将调用发送到生成的IL中。 此时, PerformLogging
方法没有引用Debug.WriteLine
,因此任何类型的构建调用都不会执行Debug.WriteLine
调用。
来自http://msdn.microsoft.com/en-us/library/6x31ezs1.aspx
在Visual Studio C#和Visual Basic项目中,默认情况下,为调试版本定义“DEBUG”条件编译符号,并为调试版本和发布版本定义“TRACE”符号。
我创建了一个使用Trace.Writeline的TraceLogger,这似乎对我有用。
我仍然愿意接受建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.