我有几个使用Debug.Assert(...)
的库。我认为Debug.Assert(...)
很好,我仍然希望它们执行,但我不希望它们阻止我的应用程序的执行。理想情况下,我只希望将它们记录在某处。
鉴于我无法更改库的代码(我仍然希望在调试中编译并运行断言),如何阻止Debug.Assert(...)
显示模式对话框?
此外,我想确保在发生Assert
时主程序继续运行(与忽略按钮的行为相同)。
谢谢!
答案 0 :(得分:26)
我不推荐它。问题是Debug.Assert
只有在您的代码中存在错误时才会被解雇 。如果您只是忽略它们或者不修复它们,那么您的用户就会受到损害。另一方面,如果您正在为不错误的事件触发Debug.Assert
,那么您也会对您的用户造成伤害(通过减少Debug.Assert的影响) )。
话虽如此,你可以禁用它。您需要做的第一件事是从Debug.Listeners集合中删除默认侦听器:
Debug.Listeners.Clear();
然后,添加您自己的:
Debug.Listeners.Add(new MyTraceListener());
您需要创建一个继承自TraceListener:
的类class MyTraceListener : TraceListener
{
// ...
public override void Fail(string msg, string detailedMsg)
{
// log the message (don't display a MessageBox)
}
}
重要的方法是TraceListener.Fail方法,在DefaultTraceListener
的实现中显示消息框。
答案 1 :(得分:18)
不需要Debug.Listeners.Clear()
只需添加到 .config :
<system.diagnostics>
<assert assertuienabled="false"/>
</system.diagnostics>
答案 2 :(得分:5)
Codekas的答案是正确的,如果你想用一把非常大的锤子击打东西。您可以使用应用程序配置文件中的<assert>
元素将assertuienabled属性设置为false,并可选择为要写入的Asserts提供日志文件。那么你就不必写自己的听众了。
您可以在MSDN page上阅读有关assert元素的更多信息。