Debug.Listeners 和 Trace.Listeners 相等

Debug.Listeners and Trace.Listeners are equal by reference

通过对 DebugTrace 类 进行一些试验,我发现 Debug.Listeners 在引用上等同于 Trace.Listeners

所以这些发生了

Console.WriteLine(Debug.Listeners == Trace.Listeners); // true
Console.WriteLine(ReferenceEquals(Debug.Listeners, Trace.Listeners)); // true

这使得无法以不同方式记录调试和跟踪消息。

这是错误还是功能?更重要的是:为什么它会这样工作?

是的,它是功能(从某种意义上说,它已被记录 - Trace.Listeners)。您有将记录的消息发送到某个目的地的侦听器列表(跟踪 window、控制台、文件...)。

可以通过defining/un-defining对应的符号分别控制Debug.xxxTrace.xxx语句是否做任何事情。通常你的 "Debug" 构建定义了 DEBUGTRACE 而 "Release" 配置只定义了 TRACE 条件编译符号。您可以在 "Build" 选项卡的项目属性中看到。