How to prevent Debug.Assert(...) to show a modal dialog
.net, assert, c#, c#-4.0, visual-studio
Solution
I wouldn't recommend it. The problem is that `Debug.Assert` is only supposed to be fired when you have bugs in your code. If you just ignore them or don't fix them, then you are doing your users a disservice. If, on the other hand, you're firing `Debug.Assert` for things that aren't bugs, then you're also doing your users a disservice (by reducing the impact of Debug.Assert).
Having said that, you can disable it. The first thing you need to do is remove the default listener from the Debug.Listeners collection:
Debug.Listeners.Clear();
Then, add your own instead:
Debug.Listeners.Add(new MyTraceListener());
You need to create a class that inherits from TraceListener:
class MyTraceListener : TraceListener
{
// ...
public override void Fail(string msg, string detailedMsg)
{
// log the message (don't display a MessageBox)
}
}
The important method is the TraceListener.Fail method, which in the implementation of `DefaultTraceListener` is what displays the message box.
Problem
I have a couple of libraries which use `Debug.Assert(...)`. I think that the `Debug.Assert(...)` are fine and I still want them to execute, but I don't want them to block the execution of my application. Ideally, I would only like them to be logged somewhere. Given that I can't change the code of the libraries (and that I still want to compile in debug and run the assertion), how do I prevent `Debug.Assert(...)` to show a modal dialog? In addition, I would like to make sure that the main program continues when an `Assert` occurs (same behavior as the Ignore button). Thanks!