繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM