Release.WriteLine来自发布模式下的日志程序集,而不是写入Visual Studio中的调试输出

时间:2012-02-13 15:32:45

标签: .net visual-studio debugging logging

我的日志库有一个简单的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的情况下忽略调试方法。

3 个答案:

答案 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,这似乎对我有用。

我仍然愿意接受建议。