【发布时间】:2010-10-21 08:36:20
【问题描述】:
我正在尝试使用一些条件来增强我的 Logger 类,以控制要记录的内容和记录的位置。我有两种日志记录功能:
public static class Logger
{
[Conditional("Logging"), Conditional("VerboseLogging")]
public static void Log(string msg, string filename)
{
// log to file
}
[Conditional("VerboseLogging")]
public static void VerboseLog(string msg, string filename)
{
Log(msg, filename); // just defer call to Log(string msg)
}
}
但是,运行以下程序
#define Logging
#define VerboseLogging
static void Main(string[] args)
{
Logger.Log("Logging", "");
Logger.VerboseLog("VerboseLogging", "");
}
仅产生输出“Logging”,缺少“VerboseLogging”。
调试应用程序显示 VerboseLogging 确实被调用,但它没有调用 Log(msg, filename)。调试器只是直接跳过函数调用到 VerboseLog() 函数的末尾。
当我从 Log(string msg) 方法中删除条件时,它可以工作。
有没有人知道为什么会发生这种情况或该怎么做才能调用它?
【问题讨论】:
-
我完全按照您的方式构建了应用程序,并且一切正常;我无法重现您遇到的问题。
-
也许二进制文件没有正确重建?您是否尝试过进行干净的构建?
-
是的,我已经试过好几次了。当然,我的应用程序还有更多内容,读取 CSV,记录到文件等。我不明白它为什么调用 VerbosLog(...),但跳过了 VerboseLog() 正文中对 Log() 的调用。
标签: c# .net debugging logging conditional