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

出于某种原因,下面的代码行在我的ASP.NET MVC项目中什么也不做:

  System.Diagnostics.Debug.Assert(false);

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

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

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

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


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


古代的问题,但如果你没有定义默认监听器,它将不会像往常一样显示消息对话框。 我还没有确认它是否真的发生了火灾并被吃掉(我怀疑是这种情况),还是根本没有发火。

但无论如何它不会显示对话框。

来自DefaultTraceListener的文档

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

可以通过元素,元素或通过调用Listeners属性(System.Diagnostics.Trace.Listeners.Clear())上的Clear方法来删除DefaultTraceListener。

你可以通过使用如下代码来检查你的监听器并获取类型:

 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());
 }

如果你没有一个叫做“Default”的话, 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扩展等删除或重写,因此添加此部分应该使其恢复到预期行为。


既然你正在运行ASP.NET MVC,那么你的web.config中是否会有一个debug = false导致问题?

链接地址: http://www.djcxy.com/p/27953.html

上一篇: Debug.Assert() has stopped working in my project

下一篇: Compiler warnings with MySQL++ with release configuration