由于某种原因,以下行在我的ASP.NET MVC项目中什么都不做:
System.Diagnostics.Debug.Assert(false);
我已经三次检查我正在使用Debug配置,并且在Debug配置设置中选中了“Define Debug constant”。
我的单元测试项目也会出现同样的问题。
实现我自己的断言方法似乎微不足道,但有点尴尬。任何关于如何解决这个问题的提示将不胜感激。
编辑:我在项目中使用了多个第三方模块。这可能是由引用在发布模式下编译的模块引起的吗?
答案 0 :(得分:6)
当您通过VisualStudio显示网页时,VS.Net Assertion会显示在VS控制台中。它不会中断线程以显示MsgBox或像编程语言那样断开断言行。
答案 1 :(得分:1)
古老的问题,但如果您没有定义默认侦听器,它将不会像往常一样显示消息对话框。我还没有确认它是否真的开火而且只是被吃掉了(我怀疑是这种情况)或者它是否根本不会发射。
但不管怎样,它都不会显示对话框。
的文档显示Assert和Fail方法调用的消息框 取决于DefaultTraceListener的存在。如果 DefaultTraceListener不在Listeners集合中,即消息 框不显示。
可以通过删除DefaultTraceListener 元素,元素或调用Clear 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>
这个WONT工作:
<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扩展程序等可能会删除或覆盖默认部分,因此添加此部分会使其恢复到预期的行为。
答案 2 :(得分:0)
由于您正在运行ASP.NET MVC,您的web.config中是否会出现debug = false导致问题?