2009-12-29 24 views
6

出于某种原因的工作,下面一行不做任何事情在我的ASP.NET MVC项目:Debug.Assert的()已停止在我的项目

System.Diagnostics.Debug.Assert(false); 

我有三重检查,我使用的调试配置并在“调试配置”设置中选中“定义调试常数”。

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

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

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

+0

你有没有仔细检查过你没有运行发布版本? – ChrisF 2009-12-29 17:22:59

+1

如何用Reflector打开你的dll/exe文件,看看assert是否真的在代码中?而且你的组件实际上是从你认为的位置加载的?也许再次检查您使用的是调试版本。 – 2009-12-29 17:27:24

+0

@ChrisF:正如我所说的,是的。三次... :-) – 2009-12-29 17:27:25

回答

0

由于您正在运行ASP.NET MVC,可能会在您的web.config中导致该问题的debug = false?

+0

不幸的不是。我刚刚检查了我的web.config,debug这个词只在这一行: 2009-12-29 17:54:23

+0

另外查看配置文件中是否有”system.diagnostics“部分。您可以关闭配置文件中的断言。 – 2009-12-29 18:01:23

+0

@Eric:感谢您的建议,但在我的web.config中未提及“诊断”一词。 – 2009-12-29 18:03:13

6

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

1

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

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

从文档为DefaultTraceListener

为断言和Fail方法消息框的显示调用 依赖于DefaultTraceListener的存在。如果 DefaultTraceListener不在Listeners集合中,则不会显示消息 。

的DefaultTraceListener可由 元件被除去,由该元件,或者通过调用监听属性 清除 方法(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将静默失败。

至于配置推移,这将工作假设一个名为默认监听器是可用的:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
     </listeners> 
    </trace> 
</system.diagnostics> 

这将工作假设一个名为默认监听器是可用的:

<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扩展等删除或重写,所以加入这个部分应该把它带回预期的行为。