Debug.Listeners 和 Trace.Listeners 相等
Debug.Listeners and Trace.Listeners are equal by reference
通过对 Debug
和 Trace
类 进行一些试验,我发现 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.xxx
和Trace.xxx
语句是否做任何事情。通常你的 "Debug" 构建定义了 DEBUG
和 TRACE
而 "Release" 配置只定义了 TRACE
条件编译符号。您可以在 "Build" 选项卡的项目属性中看到。
通过对 Debug
和 Trace
类 进行一些试验,我发现 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.xxx
和Trace.xxx
语句是否做任何事情。通常你的 "Debug" 构建定义了 DEBUG
和 TRACE
而 "Release" 配置只定义了 TRACE
条件编译符号。您可以在 "Build" 选项卡的项目属性中看到。