6

出于某种原因,以下行在我的 ASP.NET MVC 项目中没有任何作用:

  System.Diagnostics.Debug.Assert(false);

我已经三重检查了我正在使用调试配置,并且在调试配置设置中检查了“定义调试常量”。

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

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

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

4

3 回答 3

6

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

于 2010-05-14T01:01:26.520 回答
1

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

但无论哪种方式,它都不会显示对话框。

来自DefaultTraceListener的文档

Assert 和 Fail 方法调用的消息框的显示取决于 DefaultTraceListener 的存在。如果 DefaultTraceListener 不在 Listeners 集合中,则不会显示消息框。

DefaultTraceListener 可以由元素、元素或通过调用 Listeners 属性 (System.Diagnostics.Trace.Listeners.Clear()) 上的 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 扩展等删除或覆盖,因此添加此部分应使其恢复到预期的行为。

于 2015-04-11T07:59:35.210 回答
0

由于您正在通过 ASP.NET MVC 运行,因此您的 web.config 中是否存在 debug=false 导致问题?

于 2009-12-29T17:48:22.247 回答