如何防止Debug.Assert(…)显示模式对话框

我有几个使用Debug.Assert(...)的库。 我认为Debug.Assert(...)很好,我仍然希望它们执行,但我不希望它们阻止我的应用程序的执行。 理想情况下,我只希望他们在某处登录。

鉴于我无法更改库的代码(我仍然希望在调试中编译并运行断言),如何防止Debug.Assert(...)显示模式对话框?

另外,我想确保在Assert发生时主程序继续(与Ignore按钮相同的行为)。

谢谢!

我不推荐它。 问题是当你的代码中有bug时,应该只Debug.Assert 。 如果您只是忽略它们或者不修复它们,那么您的用户就会受到损害。 另一方面,如果您正在为不是错误的东西启动Debug.Assert ,那么您也会对用户造成伤害(通过减少Debug.Assert的影响)。

话虽如此,你可以禁用它。 您需要做的第一件事是从Debug.Listeners集合中删除默认侦听器:

 Debug.Listeners.Clear(); 

然后,添加您自己的:

 Debug.Listeners.Add(new MyTraceListener()); 

您需要创建一个inheritance自TraceListener的类:

 class MyTraceListener : TraceListener { // ... public override void Fail(string msg, string detailedMsg) { // log the message (don't display a MessageBox) } } 

TraceListener.Fail方法是一个重要的方法,它在DefaultTraceListener的实现中显示了消息框。

不需要Debug.Listeners.Clear()

只需添加到.config

    

Codekas的答案是正确的,如果你想用一把非常大的锤子击打东西。 您可以使用应用程序配置文件中的元素将assertuienabled属性设置为false,并可选择为要写入的Asserts提供日志文件。 那么你就不必编写自己的监听器了。

您可以在MSDN页面上阅读有关assert元素的更多信息。