Подтвердить что ты не робот

Как предотвратить Debug.Assert(...), чтобы показать модальный диалог

У меня есть несколько библиотек, которые используют Debug.Assert(...). Я думаю, что Debug.Assert(...) в порядке, и я все еще хочу, чтобы они выполнялись, но я не хочу, чтобы они блокировали выполнение моего приложения. В идеале мне бы хотелось, чтобы они были где-то зарегистрированы.

Учитывая, что я не могу изменить код библиотек (и что я все еще хочу скомпилировать при отладке и запустить утверждение), как я могу предотвратить Debug.Assert(...) показать модальный диалог?

Кроме того, я хотел бы убедиться, что основная программа продолжается, когда происходит Assert (такое же поведение, как кнопка Игнорировать).

Спасибо!

4b9b3361

Ответ 1

Я бы не рекомендовал его. Проблема в том, что 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 отображает окно сообщения.

Ответ 2

Нет необходимости в Debug.Listeners.Clear()

Просто добавьте в свой .config:

<system.diagnostics>
    <assert assertuienabled="false"/>
</system.diagnostics>

Ответ 3

Ответ Codekas правильный, если вы хотите поразить вещи действительно большим молотком. Вы можете использовать элемент <assert> в файле конфигурации приложения, чтобы установить для свойства assertuienabled значение false и, при необходимости, предоставить файл журнала для записи утверждений. Тогда вам не придется писать свой собственный слушатель.

Подробнее о элементе assert вы можете прочитать на странице