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