Debug.Assert()已停止在我的项目中工作

时间:2009-12-29 17:21:09

标签: c# asp.net-mvc assert

由于某种原因,以下行在我的ASP.NET MVC项目中什么都不做:

  System.Diagnostics.Debug.Assert(false);

我已经三次检查我正在使用Debug配置,并且在Debug配置设置中选中了“Define Debug constant”。

我的单元测试项目也会出现同样的问题。

实现我自己的断言方法似乎微不足道,但有点尴尬。任何关于如何解决这个问题的提示将不胜感激。

编辑:我在项目中使用了多个第三方模块。这可能是由引用在发布模式下编译的模块引起的吗?

3 个答案:

答案 0 :(得分:6)

当您通过VisualStudio显示网页时,VS.Net Assertion会显示在VS控制台中。它不会中断线程以显示MsgBox或像编程语言那样断开断言行。

答案 1 :(得分:1)

古老的问题,但如果您没有定义默认侦听器,它将不会像往常一样显示消息对话框。我还没有确认它是否真的开火而且只是被吃掉了(我怀疑是这种情况)或者它是否根本不会发射。

但不管怎样,它都不会显示对话框。

来自DefaultTraceListener

的文档
  

显示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导致问题?