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