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

时间:2010-05-18 01:14:54

标签: c# .net c#-4.0 assert

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

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

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

谢谢!

3 个答案:

答案 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元素的更多信息。