古老的问题,但如果您没有定义默认侦听器,它将不会像往常一样显示消息对话框。我还没有确认它是否真的会燃烧并且只是被吃掉(我怀疑是这种情况)或者它是否根本不燃烧。
但无论哪种方式,它都不会显示对话框。
来自DefaultTraceListener 的文档
Assert 和 Fail 方法调用的消息框显示
取决于 DefaultTraceListener 的存在。如果
DefaultTraceListener 不在 Listeners 集合中,消息
框不显示。
DefaultTraceListener 可以被
元素,按元素,或通过调用清除
Listeners 属性上的方法
(System.Diagnostics.Trace.Listeners.Clear())。
您可以使用以下代码检查您的侦听器并获取类型:
var listeners = new TraceListener[Debug.Listeners.Count];
Debug.Listeners.CopyTo(listeners, 0);
foreach (var listener in listeners) {
Debug.WriteLine("Name : {0} of type : {1}", listener.Name, listener.GetType());
}
如果您没有一个名为“默认”的选项,Debug.Assert 将静默失败。
就配置而言,假设有一个名为 Default 的侦听器可用,这将起作用:
<system.diagnostics>
<trace autoflush="false">
<listeners>
</listeners>
</trace>
</system.diagnostics>
假设有一个名为 Default 的侦听器可用,这将起作用:
<system.diagnostics>
<trace autoflush="false">
<listeners>
<add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/>
</listeners>
</trace>
</system.diagnostics>
这将在我们明确定义默认值时起作用:
<system.diagnostics>
<trace autoflush="false">
<listeners>
<remove name="Default" />
<add name="Default" type="System.Diagnostics.DefaultTraceListener" />
<add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/>
</listeners>
</trace>
</system.diagnostics>
这不会工作:
<system.diagnostics>
<trace autoflush="false">
<listeners>
<remove name="Default" />
<add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/>
</listeners>
</trace>
</system.diagnostics>
如果您的 web.config 中没有诊断部分,则默认值可能会被某些 VS 扩展等删除或覆盖,因此添加此部分应使其恢复预期行为。