我有一些使用 Debug.Assert(...)
的库。我认为 Debug.Assert(...)
是好的,我仍然希望它们能够执行,但我不希望它们阻止我的应用程序的执行。理想情况下,我只想将它们记录在某个地方。
考虑到我不能更改库的代码(而且我仍然想要在调试中编译并运行断言),如何防止 Debug.Assert(...)
显示模态对话框?
此外,我希望确保当发生 Assert
时,主程序继续运行(与忽略按钮的行为相同)。
谢谢!
我有一些使用 Debug.Assert(...)
的库。我认为 Debug.Assert(...)
是好的,我仍然希望它们能够执行,但我不希望它们阻止我的应用程序的执行。理想情况下,我只想将它们记录在某个地方。
考虑到我不能更改库的代码(而且我仍然想要在调试中编译并运行断言),如何防止 Debug.Assert(...)
显示模态对话框?
此外,我希望确保当发生 Assert
时,主程序继续运行(与忽略按钮的行为相同)。
谢谢!
Debug.Assert
只应当在代码中存在缺陷时被触发。如果你忽略或不修复它们,那么你就是在对用户不负责任。另一方面,如果你为并非错误的事情触发Debug.Assert
,那么你同样会对用户造成不良影响(减少了Debug.Assert的影响)。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)
}
}
DefaultTraceListener
后会弹出消息框。不需要使用Debug.Listeners.Clear()
。
只需将以下内容添加到你的.config文件中:
<system.diagnostics>
<assert assertuienabled="false"/>
</system.diagnostics>
<assert>
元素将assertuienabled属性设置为false,并可选择给出一个日志文件以写入Asserts。这样你就不必编写自己的监听器了。
Debug.Assert()
不会出现在你编译后的应用程序中(当你在发布模式下部署时)。这是严格的调试工具,不会影响最终用户。但是如上所述,如果您不修复断言,您的应用程序可能会发生糟糕的事情。 - NightOwl888