Как запретить Debug.Assert (...) показывать модальный диалог - PullRequest
25 голосов
/ 18 мая 2010

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

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

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

Спасибо!

Ответы [ 3 ]

26 голосов
/ 18 мая 2010

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

18 голосов
/ 10 мая 2016

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

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

<system.diagnostics>
    <assert assertuienabled="false"/>
</system.diagnostics>
5 голосов
/ 18 мая 2010

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

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

...