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

C# 如何防止Debug.Assert(…)显示模式对话框,c#,.net,visual-studio,c#-4.0,assert,C#,.net,Visual Studio,C# 4.0,Assert,我有几个库使用Debug.Assert(…)。我认为Debug.Assert(…)很好,我仍然希望它们执行,但我不希望它们阻止我的应用程序的执行。理想情况下,我只希望它们被记录在某个地方 考虑到我无法更改库的代码(并且我仍然希望在debug中编译并运行断言),如何防止debug.Assert(…)显示模式对话框 此外,我希望确保主程序在出现Assert时继续运行(与Ignore按钮的行为相同) 谢谢 我不推荐。问题是Debug.Assert只应该在代码中有bug时才被激发。如果您只是忽略它们或不

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

考虑到我无法更改库的代码(并且我仍然希望在debug中编译并运行断言),如何防止
debug.Assert(…)
显示模式对话框

此外,我希望确保主程序在出现
Assert
时继续运行(与Ignore按钮的行为相同)


谢谢

我不推荐。问题是
Debug.Assert
只应该在代码中有bug时才被激发。如果您只是忽略它们或不修复它们,那么您就是在给用户带来伤害。另一方面,如果您正在为非bug的东西启动
Debug.Assert
,那么您也在给用户带来伤害(通过减少Debug.Assert的影响)

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

Debug.Listeners.Clear();
然后,添加您自己的:

Debug.Listeners.Add(new MyTraceListener());
您需要创建一个继承自以下内容的类:


重要的方法是方法,在
DefaultTraceListener
的实现中,它是显示消息框的方法。

Codekas的答案是正确的,如果你想用一把真正的大锤敲打东西的话。您可以使用

无需使用
Debug.Listeners.Clear()

只需添加到您的.config:



这一点非常有效,但当断言失败时,代码不会继续运行。我希望它继续下去。“知道我该怎么做吗?”马丁断言的重点是在有bug时开火。如果启动了一个assertation,则应该停止执行,因为结果是不可预测的。您试图滥用断言,应该坚持使用自己的记录器。我们有一个场景,其中大量遗留代码库中充斥着正确和错误使用的断言。当你想调试你的特定代码时,你必须通过有时候100个断言来获得你的代码。我们正在慢慢清理断言,但在我们的例子中,部分禁用断言是一个有效的临时修复程序,因此这是一个有价值的答案。也许OP想要一个在调试中触发的断言,它不会打开一个恼人的GUI窗口,而只是让应用程序处理异常/日志记录?这非常有效,但是当断言失败时,代码不会继续运行。我希望它继续下去。“你知道我该怎么做吗?”马丁说,这是一个很老的话题,但如果你的代码中有bug,为什么还要继续呢?我的意思是,你对错误结果的期望是什么,因为你的任何假设都是错误的?@ChristianSt。您首先假设资产使用正确,或者您关心其他人的资产。如果您只想在应用程序中滑动,直到达到自己的断点,该怎么办?有趣的是,这里没有人提到它,但是
Debug.Assert()
不会出现在编译的应用程序中(当您以发布模式部署它时)。这是一个严格的调试工具,不会影响最终用户。但正如前面提到的,如果不修复断言,应用程序中可能会发生不好的事情。这对我很有帮助。我们希望在某些工具中插入调试,而不是在其他使用相同共享DLL的工具中插入调试。。。。很好,只需更改应用程序配置。
class MyTraceListener : TraceListener
{
    // ...

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